Как правильно редактировать структуры постоянных ссылок для стандартных и пользовательских записей/таксономий?

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

Я переименовал тип записи по умолчанию на своем сайте в «Статьи» с помощью следующей функции:

// Заменить название записей на Статьи в административной панели

function change_post_menu_label() {
    global $menu;
    global $submenu;
    $menu[5][0] = 'Статьи';
    $submenu['edit.php'][5][0] = 'Статьи';
    $submenu['edit.php'][10][0] = 'Добавить статьи';
    echo '';
}
function change_post_object_label() {
    global $wp_post_types;
    $labels = &$wp_post_types['post']->labels;
    $labels->name="Статьи";
    $labels->singular_name="Статья";
    $labels->add_new = 'Добавить статью';
    $labels->add_new_item = 'Добавить статью';
    $labels->edit_item = 'Редактировать статью';
    $labels->new_item = 'Статья';
    $labels->view_item = 'Просмотреть статью';
    $labels->search_items="Искать статьи";
    $labels->not_found = 'Статьи не найдены';
    $labels->not_found_in_trash="Статьи не найдены в Корзине";
    $labels->name_admin_bar="Добавить статью";
}
add_action( 'init', 'change_post_object_label' );
add_action( 'admin_menu', 'change_post_menu_label' );

Я добавил /articles/ в свою структуру постоянных ссылок в разделе Администратор -> Настройки -> Постоянные ссылки, так что сейчас это выглядит как /articles/%postname%/. Поля ‘база категории’ и ‘база тегов’ пустые.

Налогономии по умолчанию для категорий и тегов применяются только к типу записи articles.

Все CPT объявлены с 'rewrite' => array( 'with_front' => false ).

На моем сайте также есть несколько CPT (Истории, Прогулки, Кино) и несколько пользовательских таксономий (Район, Область и т.д.), которые были применены только к типу записи ‘Кино’.

Я зарегистрировал свойство rewrite для пользовательских таксономий, используя этот код:

$rewrite = isset( $taxonomy['rewrite'] ) ? $taxonomy['rewrite'] : array( 'slug' => $taxonomy['slug'] );
$hierarchical = isset( $taxonomy['hierarchical'] ) ? $taxonomy['hierarchical'] : true;

register_taxonomy( $taxonomy['slug'], $taxonomy['post_type'], array(
    'hierarchical'          => $hierarchical,
    'labels'                => $labels,
    'show_ui'               => true,
    'query_var'             => true,
    'rewrite'               => $rewrite,
));

Текущий результат/статус:

  • Все URL-адреса записей (включая записи по умолчанию) корректны: /[post-type]/[post-title]
  • URL-адреса архивов по умолчанию для тегов и категорий корректны: /articles/tag/[term] / /articles/category/[term]
  • URL-адреса архивов пользовательской таксономии CPT неверные: /articles/[taxonomy]/[term]/ (не должны включать ‘/articles’)
  • URL-адреса get_category_link() также неверны. Используя следующий код, я получаю /articles/[term], но фактический URL включает ‘/category’ после ‘/articles’:
$cats = get_the_category(); 
foreach($cats as $cat):
  echo '<li><a href="'. get_category_link($cat->cat_ID) .'">';
  echo $cat->name;
  echo '</a></li>';
endforeach;

Желаемый результат/статус:

  1. Все одиночные записи CPT и URL-адреса архивов пользовательских таксономий не должны включать /articles/?
  2. Все одиночные записи по умолчанию и URL-адреса пользовательских таксономий сохраняют /articles/?
  3. get_category_link() выводит правильный URL для показа архива и не выдает ошибку 404?

Заранее благодарю за любые советы по достижению этого.

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

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

1. Изменение структуры постоянных ссылок

Вы уже установили структуру постоянных ссылок для постов с использованием префикса /articles/ и это влияет на стандартный тип постов. Для достижения желаемого результата вам нужно будет также изменить настройки для пользовательских типов постов и таксономий.

2. Настройка пользовательских типов постов

Поскольку у вас есть несколько пользовательских типов постов (CPT), таких как Stories, Walks и Cinemas, вам нужно убедиться, что их маршруты не включают /articles/. Это можно сделать, установив параметр rewrite для ваших CPT следующим образом:

register_post_type('cinema', array(
    'labels' => $cinema_labels,
    'public' => true,
    'has_archive' => true,
    'rewrite' => array('slug' => 'cinemas', 'with_front' => false),
));

Здесь мы задаем slug, который соответствует вашему желаемому пути. Убедитесь, что каждый CPT настроен аналогичным образом.

3. Настройка пользовательских таксономий

Для пользовательских таксономий, связанных с постами типа Cinema, вы можете настраивать их без префикса articles. Для этого ваш код для регистрации таксономий должен выглядеть так:

register_taxonomy('borough', 'cinema', array(
    'hierarchical' => true,
    'labels' => $borough_labels,
    'show_ui' => true,
    'query_var' => true,
    'rewrite' => array('slug' => 'borough', 'with_front' => false),
));

Убедитесь, что 'with_front' => false указан для всех ваших кастомных таксономий. Это позволит избежать добавления /articles/ в URL таксономий.

4. Настройка ссылок на категории

Для получения правильных ссылок на категории, вы можете использовать функцию get_category_link() и убедиться, что ваши настройки не конфликтуют с вашими изменениями. Например, если вы хотите получить ссылку без /articles/, вам нужно переопределить настройки категорий так:

function custom_get_category_link($term_id) {
    $category_link = get_category_link($term_id);
    return str_replace('/articles/category/', '/category/', $category_link);
}

Теперь вы можете использовать custom_get_category_link() в ваших шаблонах, чтобы избежать ошибки 404 на старых категориях.

5. Применение изменений

После внесения всех изменений убедитесь, что вы обновили ссылки постоянных ссылок в админ-панели WordPress (Настройки -> Постоянные ссылки) для применения изменений к URL-структуре. Это обычно требует «сохранения» текущих настроек.

6. Проверка работоспособности

Наконец, важно протестировать все URL-адреса, чтобы убедиться, что они работают так, как ожидается:

  • Для стандартных статей: /articles/[post-title]
  • Для категорий: /articles/category/[term]
  • Для CPT: /cinemas/[post-title] и /borough/[term]

Проверьте каждую ссылку, чтобы убедиться, что нет 404 ошибок и что все окончательные URL соответствуют вашим ожиданиям.

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

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

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