WordPress: выводим список всех тегов (меток) в рубрике
В одном из заказов на разработку шаблона для WordPress понадобилось выполнить нестандартную задачу – в рубрике вывести список всех тегов из статей, которые в ней находятся.
Как обычно в таких случаях, поискал решение в Интернете. Нашлось несколько вариантов. Что-то не работало, что-то было затратно по ресурсам сервера (берутся все статьи рубрики и из них циклом вытягиваются теги с дальнейшим удалением дубликатов). Но следующий оказался оптимальным и с минимумом кода, благодаря имеющимся в WordPress функциям для работы с терминами, которыми и являются элементы в таксономиях “Рубрика” и “Метка (тег)”.
Итак, в шаблон рубрики (это может быть файл index.php, или archive.php, или category.php в зависимости от структуры вашего шаблона) необходимо вставить следующий код:
<?php
$post_ids = get_objects_in_term( get_query_var( 'cat' ), 'category' );
if ( ! empty( $post_ids ) && ! is_wp_error( $post_ids ) ) {
$tags = wp_get_object_terms( $post_ids, 'post_tag' );
if ( ! empty( $tags ) && ! is_wp_error( $tags ) ) {
?>
<ul>
<?php foreach( $tags as $tag ) { ?>
<li><a href="<?php echo get_term_link( $tag, 'post_tag' ); ?>"><?php echo $tag->name; ?></a></li>
<?php } ?>
</ul>
<?php } ?>
<?php } ?>
Если необходимо вывести этот список в любом месте шаблона, то замените get_query_var( 'cat' )
на ID рубрики (узнать его можно одним способов: так или так).
Стоит отметить, что данные берутся только для текущей рубрики, без учета подрубрик. Чтобы вывести теги с учетом подрубрик всех уровней вложенности, в вышеуказанном коде необходимо заменить вторую строку ($post_ids = ...
) на этот код:
$cat = get_query_var( 'cat' );
$cat_ids = get_term_children( $cat, 'category' );
array_push( $cat_ids, $cat );
$post_ids = get_objects_in_term( $cat_ids, 'category' );
Комментарии (5)
В моем случае подобный код вывалит фатальную ошибку базы данных, так как длина массива, переданного в констркцию
IN()
в недрахwp_get_object_terms()
имеет ограничения. А записей на сайте более 2х миллионов.Меня спасал хитрый
JOIN
в кастомном запросе.Просто возникает вопрос: “Зачем?”. Зачем выводить теги в рубрике – это ведь и дополнительная нагрузка на сервер (хоть и небольшая, используя твой способ) и целесообразность этого вызывает сомнения.
Заказчику так нужно было. Я тоже не вижу в этом смысла.
Ну если заказчику так хочется, то почему бы и нет. Тем более если задача не типовая, то готовое решение может сэкономить массу времени )
Спасибо. Работает. Как раз искал готовое решение, чтоб быстро внедрить. А нужно это, когда занимаешься seo-оптимизацией тегов и они осмысленны на сайте, а не просто ради того, чтобы были.