get_terms, функция для вывода элементов таксономий

Это универсальная функция, позволяющая получить данные об элементах таксономий.

Короче говоря вы можете вывести в любом виде рубрики с блога, метки, а также таксономии, созданные вами. Если же надо получить текущий элемент таксономии, то воспользуйтесь функциями get_query_var() (co значением параметра равным term – так вы получите ярлык текущего элемента таксономии) и get_term_by() (со значением первого параметра равным slug).

Выводим отсортированные по имени рубрики в виде выпадающего списка

Приведу сразу же несложный пример с кучей комментов, иначе, как мне кажется, если я начну с документации функции, то некоторым будет непонятно, как её использовать.

// вытаскиваем все рубрики в массив $categories, описание параметров функции смотрите чуть ниже
$categories = get_terms('category', 'orderby=name&hide_empty=0');
 
// если рубрики, соответствующие заданным параметрам, существуют,
if($categories){
 
	// тогда создаем выпадающий список из них
	echo '<select>';
 
	// обращаемся к каждому объекту массива (в данном случае рубрика)
	foreach ($categories as $cat){
 
		// выводим элемент списка, где атрибут value равен ID рубрики, а $cat->name - название рубрики
		echo "<option value='{$cat->term_id}'>{$cat->name}</option>";
	}
	echo '</select>';
}

Вот что у меня получилось в результате выполнения этого кода на тестовом сайте:

список рубрик при помощи get_terms

Слева – сам список (открытый), а справа его HTML-код.

Синтаксис

get_terms( $taxonomies, $args )

$taxonomies
(строка|массив) таксономия или массив таксономий, элементы которых нам нужны.

$args
(строка|массив) параметры по типу, как в WP_Query, их тоже можно записать и в виде массива и в виде строки.

Параметры массива $args

number
(целое число) количество элементов, которые нужно вывести, по умолчанию выводятся все.

offset
(целое число) сколько элементов нужно пропустить, то есть если offset=2, то начинаем с третьего.

include
(целое число|строка|массив) укажите ID элементов, которые нужно вывести, можно указать число, числа через запятую в виде строки или одномерный массив чисел, например так:

$categories = get_terms('category', 'include=1');

или так:

$categories = get_terms('category', 'include=1,4');

или даже так:

$args = array(
	'include' => array(1,4)
);
$categories = get_terms('category', $args);

Если вы хотите исключить какие-то элементы, не пытайтесь использовать минус перед числом, просто смотрите следующий параметр.

exclude
(целое число|строка|массив) укажите ID элементов, которые нужно исключить.

orderby
(строка) сортировать по:

  • id – по ID элементов (по умолчанию),
  • count – по количеству постов,
  • name – по имени,
  • slug – по ярлыку,
  • term_group – по значениям колонки term_group в таблице wp_terms базы данных,
  • none – без сортировки;

order
(строка) порядок сортировки.

  • ASC – по возрастанию (по умолчанию),
  • DESC – по убыванию;

hide_empty
(логическое) нужно ли добавлять в результат также и пустые (без постов) рубрики/метки/элементы таксономий:

  • true – не нужно (по умолчанию),
  • false – нужно;

fields
(строка) в каком виде выводить результат:

  • all – массив объектов элементов таксономий (по умолчанию), после print_r() он будет выглядеть так:
    $categories = get_terms('category');
    print_r($categories);
    /*
    Результат:
    Array ( [0] => stdClass Object ( [term_id] => 1 [name] => Заметки [slug] => notes [term_group] => 0 [menu_order] => 0 [term_taxonomy_id] => 1 [taxonomy] => category [description] => [parent] => 0 [count] => 7 ) [1] => stdClass Object ( [term_id] => 4 [name] => Новости [slug] => news [term_group] => 0 [menu_order] => 0 [term_taxonomy_id] => 4 [taxonomy] => category [description] => [parent] => 0 [count] => 2 ) [2] => stdClass Object ( [term_id] => 11 [name] => Обновления [slug] => updates [term_group] => 0 [menu_order] => 0 [term_taxonomy_id] => 11 [taxonomy] => category [description] => [parent] => 4 [count] => 1 ) )
    */
  • ids – массив составленный из ID элементов, вот как он будет выглядеть, если пропустить его через функцию print_r():
    $categories = get_terms('category', 'fields=ids');
    print_r($categories);
    /*
    Результат:
    Array ( [0] => 1 [1] => 4 [2] => 11 )
    */
  • names – возвращает массив наименований, например:
    $categories = get_terms('category', 'fields=names');
    print_r($categories);
    /*
    Результат:
    Array ( [0] => Новости [1] => Заметки )
    */
  • count – (с версии 3.2) возвращает количество всех элементов таксономии, вне зависимости от других параметров. Для этих целей вы также можете использовать wp_count_terms().
    $categories = get_terms('category', 'fields=count');
    echo $categories;
    /*
    Результат:
    4
    */
  • id=>parent – ассоциативный массив состоящих из ID элементов и ID их родителей, если родительского элемента не существует, то возвращается 0, пример:
    $categories = get_terms('category', 'fields=id=>parent');
    print_r($categories);
    /*
    Результат:
    Array ( [1] => 0 [4] => 0 [11] => 4 )
    */

slug
(строка) возвращает элементы, ярлыки которых совпадают с заданным значением.

hierarchical
(логическое) нужно ли включить в результат родительские элементы, даже если в них нет постов?

  • 1 – нужно (по умолчанию),
  • 0 – не нужно;

name__like
(строка) возвращает только те элементы, названия которых начинаются с заданного значения (без чувствительности в регистру), например:

// выведем через пробел все метки, начинающиеся с буквы "н"
$tags = get_terms('post_tag', 'name__like=н');
foreach($tags as $tag){
	echo $tag->name . ' ';
}

search
(строка) возвращает только те элементы, названия которых содержат заданное значение (без чувствительности в регистру).

pad_counts
(логическое) влияет только на числовые значения количества постов в родительских элементах.

  • 1 – количество постов родительского элемента суммируется с количеством постов дочерних элементов,
  • 0 – не суммируется (по умолчанию);

get
(строка)

  • all – вывести все элементы, вне зависимости от параметров offset, hide_empty, child_of (по умолчанию – пустая строка)

child_of
(целое число) вывести все элементы таксономии, которые являются дочерними для элемента с указанным ID вне зависимости от уровня вложенности.

parent
(целое число) вывести элементы таксономии, которые являются дочерними для элемента с указанным ID и находятся на первом уровне вложенности. Если указать 0, то будут выведены только элементы верхнего уровня.

cache_domain
(строка) (с версии 3.2) если вы планируете использовать get_terms с указанными параметрами несколько раз, укажите в качестве значения cache_domain уникальную фразу, чтобы задействовать кэш (по умолчанию – «core»).

Возвращаемые значения

Если параметр fields не изменен, то функция возвращает массив объектов, каждый из которых содержит следующую информацию об элементе таксономии.

  • term_id – ID рубрики/метки/элемента таксономии
  • name – название
  • slug – ярлык
  • term_group – значение term_group из базы данных (особого применения пока что нет, в основном – в плагинах)
  • term_taxonomy_id – ID таксономии
  • taxonomy – название таксономии
  • description – описание элемента (можно заполнить в админке при создании и редактировании)
  • parent – ID родительского элемента
  • count – количество записей

Выводим список из 5-и рубрик, отсортированных по количеству записей

В этом примере параметры функции задаются в виде массива:

$number = 5; // ради интереса вынесем переменную отдельно
$args = array(
	'number' => $number,
	'orderby' => 'count',
	'order' => 'DESC'
);
$terms = get_terms('category', $args);
if($terms){
	echo '<ul>';
	foreach ($terms as $term){
		echo "<li>{$term->name} ({$term->count})</li>";
		// рядом в скобках указываем количество записей в категории
	}
	echo '</ul>';
}

Тот же самый пример, но только с заданными в виде строки параметрами:

$number = 5;
$terms = get_terms('category', "number=$number&orderby=count&order=DESC");
if($terms){
	echo '<ul>';
	foreach ($terms as $term){
		echo "<li>{$term->name} ({$term->count})</li>";
	}
	echo '</ul>';
}
Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.