Постоянные ссылки для пользовательских типов записей и таксономий

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

Я пытался понять, как добиться определенной структуры постоянной ссылки, но ничего не вышло. Вот ситуация:

На моем сайте у меня есть одна основная пользовательская таксономия (модуль). У меня есть пять пользовательских типов записей (рассылка, тема, вопрос, ресурс, деятельность). Таксономия “модуль” связана с каждым из пользовательских типов записей.

Я хочу добиться структуры постоянной ссылки, которая выглядела бы так (для деятельности, например):

http://example.com/module/%module%/activity/activity_name. И я хочу, чтобы http://example.com/module/%module%/activity вела к архиву для типа записи “деятельность” для тех действий, которые связаны с %module%.

Я использовал плагин PODS для управления моими пользовательскими типами записей/таксономиями. Я экспериментировал с различными пользовательскими кодами и другими плагинами, чтобы достичь своей цели, но так и не смог это сделать.

Некоторые записи здесь, которые я видел и которые близки к тому, что я ищу, связаны с написанием кода для определения пользовательских типов записей/таксономий. У меня с этим проблем нет; я делал это раньше. Однако, поскольку у меня все настроено (а пользовательские структуры довольно обширны), я хотел бы продолжать использовать/развивать PODS, если это возможно.

Похоже, вы хотите создать Пользовательские Таксономии с Pods. Это похоже на создание новой опции, которую вы позже можете добавить к каждому элементу, например, добавление “Размер” как опции к “Рубашка”. Тогда Размер был бы кликабельным, и вы могли бы видеть архивы для всех похожих размеров. Это делается с помощью Пользовательских Таксономий.

  1. В админке WordPress перейдите в Pods Admin > Добавить новый, и нажмите Создать новый
  2. В выпадающем списке Тип контента, выберите ‘Пользовательская таксономия (как категории или метки)
  3. Введите единственное и множественное обозначение (например, Размер и Размеры), используйте Расширенные параметры, если хотите переопределить Архивный slug, и нажмите Следующий шаг.
  4. Настройте параметры пользовательского интерфейса администратора
  5. Настройте Расширенные параметры, иерархические для таксономий, таких как Категории, оставьте это без изменений для таксономий в стиле меток.
  6. Настройте Расширенные параметры, Связанные типы записей для соединения ваших таксономий с типами записей, которые они будут организовывать.
  7. Добавьте любые поля к таксономии в разделе Управление полями.

Источник: https://docs.pods.io/creating-editing-pods/creating-a-custom-taxonomy/


Примечание: Вам может не понадобиться иметь структуру постоянной ссылки, как вы упомянули. Используя pods, вы можете иметь URL вроде: http://example.com/pod-module-name

Например:

http://example.com/question

Эта страница будет перечислять все записи вопросов. И каждая отдельная запись должна иметь URL вроде:

http://example.com/question/the-question-slug/

Это стандартное поведение Pods. Так что это может уже делать что-то близкое к тому, что вы хотите.

Я полагаю, add_permastruct может помочь вам в этом. Например, предположим, что текущая структура постоянной ссылки, определенная PODS, выглядит как “example.com/activities/activity_name”.

function wpse415279_custom_permastruct(){
  add_permastruct( 
   'activities', /* должна соответствовать текущему slug для типа записи "activities" */
   'module/%module%/activities/%activities%' 
  );
}

/* 
Эта функция должна запускаться после того, как PODS определил тип записи.
Я предполагаю, что это происходит на хука init, так что это также будет привязано
к init, но с низким приоритетом 100.
*/
add_action( 'init', 'wpse415279_custom_permastruct', 100 );

Теперь мы говорим WordPress изменить ссылки, которые он генерирует на фронт-энде, чтобы они соответствовали нашей новой структуре постоянной ссылки выше. Мы можем сделать это, фильтруя ссылку типа записи:

function wpse415279_rewrite_activity_links( $post_link, $post_obj ){

  /* выясняем, привязана ли к этому посту термин в таксономии 'module' */
  if ( is_object( $post_obj )){
    $terms = wp_get_object_terms( 
      $post_obj->ID, 
      'module' /* предполагая, что 'module' - это ключ вашей пользовательской таксономии */
    );
  }

  /* если да, заменяем тег замены %module% на название модуля */
  if ( $terms ){
    $post_link = str_replace('%module%', $terms[0]->slug, $post_link);
  }
  return $post_link;
}

add_filter( 'post_type_link', 'wpse415279_rewrite_activity_links', 10, 2 );

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

Также посмотрите на лучший ответ на этот вопрос, если вы еще этого не сделали, в основном оттуда я это и взял.

Правка: Предполагаю, что следует упомянуть о необходимости обновить перезаписи перед тестированием, перейдя в настройки > постоянные ссылки и нажав “сохранить изменения”.

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

Чтобы настроить структуру постоянных ссылок (permalinks) для пользовательских типов записей и таксономий в WordPress, особенно с использованием плагина Pods, вам нужно выполнить несколько шагов. Давайте разберёмся в этом процессе более детально.

Обзор задачи

У вас есть основная пользовательская таксономия под названием "module", связанная с пятью пользовательскими типами записей: dispatch, topic, question, resource, activity. Вы хотите, чтобы структура постоянных ссылок для типа записи "activity" выглядела так:

  • Для отдельной записи: http://example.com/module/%module%/activity/activity_name
  • Для архива всех записей этого типа: http://example.com/module/%module%/activity

Шаги для реализации:

1. Создание пользовательских таксономий и типов записей через Pods

Если вы уже создали таксономии и типы записей с помощью Pods, убедитесь, что:

  • Ваши пользовательские типы записей имеют корректные слуги (slugs).
  • Таксономия "module" связана со всеми необходимыми типами записей.

Вы можете проверить или создать их в разделе Pods Admin -> Add New.

2. Определение структуры постоянных ссылок

Для изменения структуры постоянных ссылок вам потребуется использовать функции add_permastruct() и добавить фильтр на генерацию ссылок. Эта часть кода можно добавить в файл вашего плагина или в файл functions.php вашей темы.

function wpse415279_custom_permastruct() {
    add_permastruct(
        'activities', /* подходит к текущему слогу для "activities" */
        'module/%module%/activities/%activities%'
    );
}

add_action('init', 'wpse415279_custom_permastruct', 100);

3. Перезапись ссылок для пользовательского типа записи

Теперь воспользуемся фильтром post_type_link, чтобы поменять ссылки на основе вашего таксономии "module".

function wpse415279_rewrite_activity_links($post_link, $post_obj) {
    if (is_object($post_obj)) {
        $terms = wp_get_object_terms(
            $post_obj->ID, 
            'module' /* предположим, что 'module' - это ключ для вашей таксономии */
        );
    }

    if ($terms && !is_wp_error($terms)) {
        $post_link = str_replace('%module%', $terms[0]->slug, $post_link);
    }
    return $post_link;
}

add_filter('post_type_link', 'wpse415279_rewrite_activity_links', 10, 2);

4. Обновление структуры перезаписей

После внесения изменений необходимо обновить структуру перезаписей. Для этого перейдите в Настройки -> Постоянные ссылки и просто нажмите "Сохранить изменения". Это очистит кэш перезаписей (rewrite rules), что позволит вашим новым ссылкам работать корректно.

Примечания:

  • Важно регулярно тестировать изменения на локальной среде или staging-сайте перед их внедрением на продакшн.
  • Убедитесь, что у вас настроены все необходимые права доступа для доступа к вашим пользовательским типам и таксономиям.
  • Использование плагина Pods предоставляет вам гибкость в настройках, поэтому не стесняйтесь использовать его возможности для дальнейшего расширения вашего проекта.

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

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

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