WordPress: выводим список всех тегов (меток) в рубрике

В одном из заказов на разработку шаблона для WordPress понадобилось выполнить нестандартную задачу — в рубрике вывести список всех тегов из статей, которые в ней находятся.

Как обычно в таких случаях, поискал решение в Интернете. Нашлось несколько вариантов. Что-то не работало, что-то было затратно по ресурсам сервера (берутся все статьи рубрики и из них циклом вытягиваются теги с дальнейшим удалением дубликатов). Но следующий оказался оптимальным и с минимумом кода, благодаря имеющимся в WordPress функциям для работы с терминами, которыми и являются элементы в таксономиях «Рубрика» и «Метка (тег)».

Итак, в шаблон рубрики (это может быть файл index.php, или archive.php, или category.php в зависимости от структуры вашего шаблона) необходимо вставить следующий код:

<?php
$postIDs = get_objects_in_term(get_query_var('cat'), 'category');
if (!empty($postIDs) && !is_wp_error($postIDs)) {
	$tags = wp_get_object_terms($postIDs, '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 рубрики (узнать его можно одним способов: так или так).

Стоит отметить, что данные берутся только для текущей рубрики, без учета подрубрик. Чтобы вывести теги с учетом подрубрик всех уровней вложенности, в вышеуказанном коде необходимо заменить вторую строку ($postIDs = ...) на этот код:

$cat = get_query_var('cat');
$catIDs = get_term_children($cat, 'category');
array_push($catIDs, $cat);
$postIDs = get_objects_in_term($catIDs, 'category');
Комментарии (3)
  1. 1

    В моем случае подобный код вывалит фатальную ошибку базы данных, так как длина массива, переданного в констркцию IN() в недрах wp_get_object_terms() имеет ограничения. А записей на сайте более 2х миллионов.

    Меня спасал хитрый JOIN в кастомном запросе.

  2. 2

    Просто возникает вопрос: «Зачем?». Зачем выводить теги в рубрике — это ведь и дополнительная нагрузка на сервер (хоть и небольшая, используя твой способ) и целесообразность этого вызывает сомнения.

Ваш комментарий