- Вопрос или проблема
- Ответ или решение
- Шаг 1: Определение пользовательского типа записи и таксономии
- Шаг 2: Регистрация пользовательского типа записи и таксономии
- Шаг 3: Установка структуры постоянных ссылок
- Шаг 4: Использование ACF для выбора таксономии
- Шаг 5: Модификация URL
- Шаг 6: Установка структуры URL
- Шаг 7: Обработка запроса на стороне обработчика
- Заключение
Вопрос или проблема
Я работаю над простым настраиваемым типом записи с несколькими пользовательскими таксономиями. Используя ACF, я создал поля, где пользователь может выбрать одно значение для каждой из пользовательских таксономий.
Вот мой пользовательский тип записи и пользовательская таксономия.
add_action('init', 'pj_product_opt');
function pj_product_opt() {
register_post_type( 'product', array(
'labels' => array(
'name' => 'Продукты',
'singular_name' => 'Продукт'
),
'description' => 'Продукты',
'public' => true,
'menu_position' => 20,
'supports' => array('title', 'editor', 'custom-fields'),
'menu_icon' => 'dashicons-album'
));
register_taxonomy(
'product_manufacturer',
'product',
array(
'labels' => array(
'name' => __( 'Производители'),
'singular_name' => __('Производитель'),
'add_new_item' => __('Добавить нового производителя'),
'edit_item' => __('Редактировать производителя'),
'new_item' => __('Новый производитель'),
'search_items' => __('Поиск производителей')
),
'rewrite' => array('slug' => 'product_manufacturer'),
'hierarchical' => false
)
);
Я пытаюсь добиться URL вроде следующего:
/products/%manufacturer-slug%/%product-slug%
Помните – значение поля производителя сейчас находится в пользовательском поле, которое я определил и назначил типу записи product
. Что-то похожее на это, позволяющее производителям появляться как часть иерархии, было бы здорово. Любая рекомендация была бы отличной.
Может, это глупый вопрос, но вы пробовали создать пользовательские таксономии с помощью графического интерфейса через плагин?
Я спрашиваю, потому что недавно у меня возникли проблемы с созданием пользовательских таксономий для сайта ресторана с помощью php-функций. Я смог это сделать, только используя графический интерфейс.
Ответ или решение
Чтобы использовать поле связи таксономии ACF в структуре URL для пользовательского типа записи, вам нужно выполнить несколько шагов. Мы рассмотрим процесс, учитывая ваше определение пользовательского типа записи и таксономии.
Шаг 1: Определение пользовательского типа записи и таксономии
На начальном этапе вы уже создали пользовательский тип записи product
и таксономию product_manufacturer
. Это базовое требование, которое вы успешно выполнили.
Шаг 2: Регистрация пользовательского типа записи и таксономии
Убедитесь, что вы правильно зарегистрировали таксономию с параметром rewrite
. Это позволяет указать структуру URL, которую вы хотите использовать:
add_action('init', 'pj_product_opt');
function pj_product_opt() {
register_post_type('product', array(
'labels' => array(
'name' => 'Products',
'singular_name' => 'Product'
),
'description' => 'Products',
'public' => true,
'menu_position' => 20,
'supports' => array('title', 'editor', 'custom-fields'),
'menu_icon' => 'dashicons-album',
'has_archive' => true, // Включите архив, если необходимо
));
register_taxonomy('product_manufacturer', 'product', array(
'labels' => array(
'name' => __('Manufacturers'),
'singular_name' => __('Manufacturer'),
'add_new_item' => __('Add New Manufacturer'),
'edit_item' => __('Edit Manufacturer'),
'new_item' => __('New Manufacturer'),
'search_items' => __('Search Manufacturers')
),
'rewrite' => array('slug' => 'product_manufacturer'),
'hierarchical' => false
));
}
Шаг 3: Установка структуры постоянных ссылок
После того как вы зарегистрировали свой тип записи и таксономию, вам нужно убедиться, что структура ссылок настроена правильно. Перейдите в Настройки
> Постоянные ссылки
в админке WordPress и установите пользовательскую структуру.
Шаг 4: Использование ACF для выбора таксономии
С помощью ACF вы создали поле, в котором пользователь может выбрать определенного производителя. Для использования этого поля в URL, нужно получить значение выбранного производителя и добавить его в структуру ссылок. Предположим, что ваш ACF поле имеет имя manufacturer
.
Шаг 5: Модификация URL
Для модификации URL постов, вам нужно использовать фильтр post_type_link
. Это тот момент, где мы можем создать желаемую структуру URL:
add_filter('post_type_link', 'custom_product_link', 10, 2);
function custom_product_link($permalink, $post) {
if ($post->post_type === 'product') {
// Получаем выбранного производителя
$manufacturer = get_field('manufacturer', $post->ID);
if ($manufacturer) {
$manufacturer_term = get_term_by('id', $manufacturer, 'product_manufacturer');
if ($manufacturer_term) {
$permalink = str_replace('%manufacturer-slug%', $manufacturer_term->slug, $permalink);
}
}
}
return $permalink;
}
Шаг 6: Установка структуры URL
Теперь нужно добавить %manufacturer-slug%
в структуру постоянных ссылок:
// Добавьте в ваш файл функций (functions.php)
add_action('init', function() {
global $wp_rewrite;
$wp_rewrite->add_route('products/([^/]+)/([^/]+)/?', 'index.php?product=$matches[2]');
$wp_rewrite->flush_rules();
});
Шаг 7: Обработка запроса на стороне обработчика
Чтобы правильно обработать запрос, вам следует убедиться, что WordPress может правильно интерпретировать этот новый формат URL.
add_action('pre_get_posts', function($query) {
if (!is_admin() && $query->is_main_query() && is_post_type_archive('product')) {
// Логика для обработки запросов
}
});
Заключение
Теперь вы имеете полный доступ для создания URL с использованием таксономии ACF в вашем пользовательском типе записи. Эта структура поможет визуально улучшить SEO, предоставляя четкий контекст для ваших страниц продуктов. Убедитесь, что ваши настройки постоянных ссылок актуальны и протестируйте ваши новые URL, чтобы гарантировать, что они работают так, как вы ожидаете.