Как использовать поле отношений таксономии ACF в качестве части структуры URL для произвольного типа записи?

Вопрос или проблема

Я работаю над простым настраиваемым типом записи с несколькими пользовательскими таксономиями. Используя 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, чтобы гарантировать, что они работают так, как вы ожидаете.

Оцените материал
Добавить комментарий

Капча загружается...