Вопрос или проблема
Предположим, мы зарегистрировали пользовательские таксономии composers
и interprets
.
Таксономия composers
может иметь следующие термины:
- Вольфганг Амадей Моцарт
- Людвиг ван Бетховен
- Рихард Вагнер
Таксономия interprets
может иметь следующие термины:
- Гленн Гулд
- Даниэль Баренбойм
- Венская государственная опера
Мне интересно, есть ли в иерархии шаблонов WordPress специальный файл, такой как taxonomy-terms.php
, для вывода терминов таксономии с помощью простого цикла:
<?php
while ( have_posts() ) : the_post();
the_title();
endwhile;
?>
Это выведет (предполагая настройку постоянных ссылок /%postname%/
):
Вольфганг Амадей Моцарт
,Людвиг ван Бетховен
,Рихард Вагнер
при просмотреexample.com/composers
Гленн Гулд
,Даниэль Баренбойм
,Венская государственная опера
при просмотреexample.com/interprets
Если нет, мне хотелось бы узнать лучший способ реализации этого. Я бы создал шаблон страницы для каждой таксономии, template-composers-terms.php
и template-interprets-terms.php
, и вывел термины, используя что-то вроде следующего кода:
<?php
/* Имя шаблона: Список композиторов */ // или 'Список интерпретаторов'
$terms = get_terms( 'composers' ); // или get_terms( 'interprets' )
foreach ( $terms as $term ) :
echo $term->name;
endforeach;
?>
Затем я создаю две страницы, “Композиторы” и “Интерпретаторы”, которым я соответственно назначаю шаблоны “Список композиторов” и “Список интерпретаторов”.
Мне не очень удобно использовать этот метод, потому что это требует создания нового файла для каждой таксономии.
Вы можете включить один и тот же файл в template-composers-terms.php
и template-interprets-terms.php
следующим образом:
<?php
/* Имя шаблона: Список композиторов */
$tax = "composer";
require "include/file_which_does_all_the_work.php";
И если слаг страницы совпадает со слагом таксономии, вы можете сохранить строку $tax = ...
, добавив это в включаемый файл:
$tax = $GLOBALS["wp_query"]->query["pagename"];
В коде есть ошибка, я думаю…
так как get_terms поддерживает массивы в качестве параметров.
Поэтому лучший способ сделать это, я думаю, следующий:
1- создайте ваш шаблон template-composers-terms.php
2- Включите их на странице, используя:
<?php get_template_part('template','composers-terms') ?>
И, наконец, в вашем вновь созданном файле вставьте:
<?php
/* Имя шаблона: Список композиторов или 'Список интерпретаторов' */
$terms = get_terms(array(
'taxonomy' => 'composers', // убедитесь, что это ключ таксономии, переданный в функцию register_taxonomy.
'hide_empty' => false
));
foreach ( $terms as $term ) :
echo $term->name;
endforeach;
?>
Ответ или решение
Вопрос о том, существует ли специальный шаблонный файл для вывода всех терминов заданной пользовательской таксономии в WordPress, требует подробного анализа. В стандартной иерархии шаблонов WordPress не предусмотрен файл типа taxonomy-terms.php
, который мог бы автоматически обрабатывать вывод терминов для любой пользовательской таксономии. Однако это не означает, что вы не можете добиться желаемого результата другим образом.
Предложенное Решение
-
Создание Пользовательских Шаблонов
Вы можете создать шаблоны для каждой из таксономий, такие как
template-composers-terms.php
иtemplate-interprets-terms.php
. В каждом из этих шаблонов вы сможете использовать функциюget_terms()
для получения и вывода терминов. Вот как это может выглядеть:<?php /* Template Name: Список композиторов */ $terms = get_terms(array( 'taxonomy' => 'composers', // Убедитесь, что это ключ таксономии, зарегистрированной в register_taxonomy 'hide_empty' => false, // Опционально, нужно для отображения пустых терминов )); foreach ($terms as $term) { echo $term->name . '<br>'; // Выводим название термина с переносом строки } ?>
-
Использование Общего Файла
Чтобы избежать дублирования кода, можно создать отдельный файл, который будет обрабатывать вывод терминов. Затем вы будете включать его в каждом из шаблонов:
<?php /* Template Name: Список композиторов */ $tax = 'composers'; // Задаем нужную таксономию require "includes/list-terms.php"; // Подключаем общий файл ?>
В файле
list-terms.php
код может выглядеть следующим образом:<?php $terms = get_terms(array( 'taxonomy' => $tax, 'hide_empty' => false, )); foreach ($terms as $term) { echo $term->name . '<br>'; } ?>
-
Динамически Определяемая Таксономия
Если имена страниц совпадают с именами таксономий, вы также можете автоматизировать процесс получения имени таксономии:
<?php $tax = $GLOBALS['wp_query']->query['pagename']; require "includes/list-terms.php"; ?>
Оптимизация и SEO
Для улучшения SEO-эффективности:
- Содержимое страницы: Используйте четкие заголовки и описания для каждой страницы с выводом терминов.
- Ключевые слова: Включите ключевые слова, относящиеся к композиторам и интерпретам, в текст и теги заголовков.
- Структурированный контент: Выводите термины в виде списков или карточек, чтобы улучшить структуру страницы и облегчить индексацию.
Заключение
Хоть и нет специального шаблона для вывода терминов пользовательских таксономий в WordPress, существуют простые и эффективные способы реализации данной задачи, избегая дублирования кода. Используя шаблоны и общий файл, вы можете управлять выводом терминов более эффективно и с меньшими затратами ресурсов.