Почему не обновляется URL записи (custom_post_type) при изменении категорий (taxonomies) в WordPress?

  • 30 декабря 2024 г. 11:24
Ответы на вопрос 1
В WordPress изменение категорий или других таксономий (taxonomies) для записи типа `custom_post_type` не приводит к автоматическому обновлению URL (постоянной ссылки) этой записи. Это связано с тем, что постоянные ссылки формируются на основе определённых параметров, и изменения в таксономиях не всегда влияют на них. Вот несколько возможных причин и решений этой проблемы:

1. **Настройки постоянных ссылок**: Убедитесь, что вы правильно настроили структуру постоянных ссылок в разделе «Настройки» → «Постоянные ссылки». Иногда стоит просто пересохранить настройки, чтобы обновить правила переписывания.

2. **Функция `rewrite` в `register_post_type`**: Когда вы регистрируете свой `custom_post_type`, убедитесь, что вы правильно настроили параметры `rewrite`. Например, если вы хотите, чтобы категория входила в URL, вам нужно будет указать соответствующий параметр.

   ```php
   register_post_type('your_custom_post_type', array(
       'rewrite' => array('slug' => 'your_post_type_slug/%your_taxonomy%'),
   ));
   ```

3. **Кастомизация структуры постоянных ссылок с использованием параметров**: Если вы хотите, чтобы URL менялся в зависимости от выбранной категории, необходимо использовать `post_type_link` фильтр, чтобы динамически изменять ссылку в зависимости от текущих таксономий.

   ```php
   add_filter('post_type_link', 'custom_post_type_link', 10, 2);
   function custom_post_type_link($post_link, $post) {
       if ($post->post_type == 'your_custom_post_type') {
           $terms = wp_get_post_terms($post->ID, 'your_taxonomy');
           if ($terms) {
               return str_replace('%your_taxonomy%', $terms[0]->slug, $post_link);
           } else {
               return str_replace('%your_taxonomy%', 'default-category', $post_link);
           }
       }
       return $post_link;
   }
   ```

4. **Обновление URL записи при изменении таксономий**: Возможно, вам потребуется вручную обновить постоянную ссылку записи при каждом изменении категорий или таксономий. Это можно сделать, добавив обработчик для сохранения поста.

   ```php
   add_action('save_post', 'update_custom_post_type_permalink', 10, 2);
   function update_custom_post_type_permalink($post_id, $post) {
       if ($post->post_type == 'your_custom_post_type') {
           // Обновите постоянную ссылку здесь.
           $post->post_name = sanitize_title($post->post_title);
           remove_action('save_post', 'update_custom_post_type_permalink'); // Избегаем бесконечной рекурсии
           wp_update_post($post);
           add_action('save_post', 'update_custom_post_type_permalink', 10, 2); // Снова добавляем обработчик
       }
   }
   ```

5. **Кеширование**: Иногда проблема может быть связана с кешированием. Если вы используете плагин кеширования, попробуйте очистить кэш, чтобы изменения стали видимыми.

6. **Проблемы с плагинами или темами**: Некоторые плагины или темы могут влиять на поведение постоянных ссылок. Попробуйте отключить их и посмотреть, решит ли это проблему.

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