Постоянная ссылка переписывается для включения пользовательского термина таксономии.

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

Я создал пользовательскую таксономию для постов, используя

register_taxonomy( 
    'discipline', 
    array('post'), /* если вы изменяете название register_post_type( 'custom_type', то вам нужно изменить это */
    array(
        'hierarchical' => true,     /* если это true, то работает как категории */             
        'labels' => array(
            'name' => __( 'Disciplines' ), /* название пользовательской таксономии */
            'singular_name' => __( 'Discipline' ), /* единственное название таксономии */
            'search_items' =>  __( 'Search Disciplines' ), /* заголовок поиска для таксономии */
            'all_items' => __( 'All Disciplines' ), /* заголовок всех таксономий */
            'parent_item' => __( 'Parent Discipline' ), /* заголовок родительской таксономии */
            'parent_item_colon' => __( 'Parent Discipline:' ), /* заголовок родительской таксономии */
            'edit_item' => __( 'Edit Discipline' ), /* заголовок редактирования пользовательской таксономии */
            'update_item' => __( 'Update Discipline' ), /* заголовок обновления таксономии */
            'add_new_item' => __( 'Add New Discipline' ), /* заголовок добавления новой таксономии */
            'new_item_name' => __( 'New Discipline Name' ) /* заголовок названия таксономии */
        ),
        'rewrite' => array(
            'slug' => 'discipline',
            'with_front' => false
        ),
        'show_ui' => true,
        'query_var' => true,
    )
);

Если я использую только %postname% на странице постоянных ссылок, я получаю URL типа:

whatever.com/discipline/name-of-post

Я хочу, чтобы URL выглядел как

whatever.com/parent-term-name/name-of-post

Я удалил часть discipline, используя плагин “Remove Taxonomy Base Slug”, но не могу понять, как включить имя термина И оставить постоянные ссылки на другие части сайта неизменными.

Я думаю, вам нужно включить переменную discipline в структуру пользовательских постоянных ссылок

/%discipline%/%postname%

Ответ или решение

Для решения задачи по изменению структуры постоянных ссылок в WordPress, чтобы включить термины пользовательской таксономии «дисциплина», необходимо следовать нескольким шагам и учесть специфические аспекты настройки.

Теория (Theory)

WordPress предоставляет функциональность для создания пользовательских таксономий и определения их поведения через функции, такие как register_taxonomy(). В вашем случае вы уже создали таксономию «дисциплина» и желаете, чтобы структура URL включала термины этой таксономии. Обычная структура URL с использованием просто %postname% дает вам формат whatever.com/discipline/name-of-post, где «discipline» является базой таксономии.

Чтобы изменить структуру, вы можете воспользоваться пользовательскими тегами в настройках постоянных URL. Хотя WordPress не поддерживает динамическое включение таксономий в URL постов по умолчанию, существуют методы, позволяющие добиться желаемого результата, а именно: whatever.com/parent-term-name/name-of-post.

Пример (Example)

Рассмотрим пример реализации изменения структуры URL, в которой используется функция хуков WordPress вместе с пользовательским PHP-кодом. Предположим, у вас есть иерархическая таксономия, где различные дисциплины могут иметь свои родительские и дочерние категории. Мы будем использовать несколько хуков и функцию для изменения URL, включающую термин из таксономии.

Шаг 1: Создайте Тему Основного Файла

В файле вашей темы functions.php добавьте следующий код, чтобы перезаписать структуру постоянных ссылок и включить термин таксономии в URL:

add_filter('post_link', 'custom_discipline_permalink', 10, 2);
add_filter('post_type_link', 'custom_discipline_permalink', 10, 2);

function custom_discipline_permalink($permalink, $post) {
    if (strpos($permalink, '%discipline%') === FALSE) return $permalink;

    // Получение всех терминов для заданной записи
    $terms = wp_get_object_terms($post->ID, 'discipline'); 

    if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) {
        $taxonomy_slug = $terms[0]->slug;
    } else {
        $taxonomy_slug = 'no-discipline';
    }

    return str_replace('%discipline%', $taxonomy_slug, $permalink);
}

Шаг 2: Пересоздайте Постоянные Ссылки

После внесения изменений в файл functions.php необходимо перейти в админ-панель WordPress, затем в "Настройки" – "Постоянные ссылки", и просто нажать "Сохранить изменения". Это действие пересоздаст все ссылки, включая новые правила.

Применение (Application)

Теперь, учитывая цель, вы получите преимущество от динамической генерации URL, используя ваш собственный термин таксономии. Таким образом, поситителей вашего веб-сайта будут видеть URL в форме whatever.com/parent-term-name/name-of-post, что способствует логичному и семантическому представлению контента.

Эта практика улучшает SEO вашей страницы, так как URL теперь отражает дескриптивную природу категоризации контента. Открыто и понятно структурированный URL может способствовать увеличению кликабельности ссылки и улучшению пользовательского опыта, благодаря простому и интуитивно понятному доступу к информации.

Важно отметить, что внедряя изменения, подобные указанным, необходимо тщательно тестировать их влияние на различные участки веб-сайта и обеспечивать стабильность работы всех его разделов. Это может включать тестирование всех существующих ссылок и обновление связанных тем и плагинов для предотвращения возможных технических конфликтов.

С помощью указанных выше инструкций и примеров вы сможете успешно включить термины пользовательской таксономии в постоянные ссылки без воздействия на другие части вашего сайта.

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

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