Делаем архивы категорий или таксономии иерархическими

УрокиКомментариев нет

По умолчанию архивы для категорий и других таксономий работают как и архивы любых других таксономий: они отображают все записи в категории или в термине таксономии. Для показа только элементов-родителей без показа элементов-детей можно опять использовать фильтр pre_get_posts.

Точно так же, как и при создании вашего собственного WP_QUERY для записей в таксономии, WP_QUERY главного цикла использует аргументы tax_query для получения записей таксономии. tax_query имеет аргумент include_children, который по умолчанию равен 1 или «истина». Поменяв его на 0 или «ложь», мы предотвратим отображение дочерних терминов в архиве.

Результаты выглядят подходящими, но имеют несколько существенных недостатков. И это нормально, ведь мы делаем только первые шаги в создании чего-то великолепного.

Первая и основная проблема в том, что результат — это не страница архива, показывающая дочерние термины; это запись с параметром родителя. Другая проблема — у нас нет нормального способа переходить к архивам дочерних терминов.

Хороший способ совладать с этим — комбинировать фильтр pre_get_post с модификацией шаблона, показывающего категорию или таксономию. Как определить, какой шаблон используется для вывода категории или пользовательской таксономии, мы выясняли выше. Также имейте в виду, что вы всегда можете обернуть ваши изменения в условные теги, такие как is_category() или is_tax(), но это может быстро стать громоздким, так что имеет смысл создать копию вашего archive.php и удалять ненужный код.

Первый шаг — обернуть всю работу в проверку, имеет ли текущая таксономия дочерние термины. Если нет — мы не отображаем ничего. Для этого используем get_term_children(), который возвратит пустой массив, если текущий термин не имеет дочерних. Этот массив мы можем проверить с помощью !empty().

Для выполнения этого для любой отображаемой таксономии, мы должны получить текущую таксономию и термин таксономии из массива query_vars глобального объекта $wp_query. Слаг таксономии содержится в ключе taxonomy, а слаг термина таксономии — в ключе tax.

Для использования get_term_children() мы должны использовать ID термина. ID нет в query_vars, но для его получения мы можем передать слаг в get_term_by().

Вот как мы получаем всю нужную информацию и сохраняем в переменные:

Теперь мы продолжим, если только $terms не пустой массив. Для проверки его на пустоту мы сначала перезаполним термины, используя get_terms(). Это необходимо потому что get_term_children возвращает только массив ID, а нам нужны ID и имена, оба находятся в объекте, возвращенном get_terms(). Мы можем в цикле обойти все элементы этого объекта, и создать список, выводя имя, как ссылку. Ссылка может быть получена передачей ID термина в функцию get_term_link().

Вот весь код:

Статьи из раздела:

  1. Как работают архивы таксономий, тегов, категорий и пользовательских типов таксономий.
  2. Создание пользовательских таксономий
  3. Использование WP_Query с пользовательскими таксономиями
  4. Добавление пользовательских типов записей к архивам категорий и тегов.
  5. Создание пользовательской целевой страницы для архивов таксономий

Будь первым кто прокомментирует статью.

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

Войти с помощью: