get_terms()

Владислав Белецкий
Владислав Белецкий .
Категория:
Комментариев: 0

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

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

get_terms( $args = array(), $deprecated = '' )

Параметры

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

taxonomy
(строка|массив) название таксономии или массив таксономий, например array( 'category', 'post_tag' ).

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

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

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

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

или так:

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

или даже так:

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

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

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

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

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

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

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

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

$categories = get_terms( array( 'taxonomy' => '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 ) )
*/
$categories = get_terms( array( 'taxonomy' => 'category', 'fields' => 'ids' ) );
print_r( $categories );
/*
Результат:
Array ( [0] => 1 [1] => 4 [2] => 11 )
*/
$categories = get_terms( array( 'taxonomy' => 'category', 'fields' => 'names' ) );
print_r( $categories );
/*
Результат:
Array ( [0] => Новости [1] => Заметки )
*/
$categories = get_terms( array( 'taxonomy' => 'category', 'fields' => 'count' ) );
echo $categories;
/*
Результат:
4
*/
$categories = get_terms( array( 'taxonomy' => 'category', 'fields' => 'id=>parent' ) );
print_r( $categories );
/*
Результат:
Array ( [1] => 0 [4] => 0 [11] => 4 )
*/

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

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

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

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

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

get
(строка)

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

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

meta_key
(строка) Укажите это значение ключа мета поля, если хотите получить только элементы таксономи, содержащие его.

meta_value
(строка) Значение мета поля элементов таксономии для указанного ключа meta_key.

meta_query
(массив) Работает так же, как и meta_query в WP_Query при выводе постов. О нём даже есть отдельный урок.

childless
(логическое) Принимает значения true/false. При установке в значени true, функция пропустит все термины, у которых есть дочерние элементы.

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

WP_Term

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

Или чекайте первый пример ниже.

Примеры

1. Выводим результат функции через print_r()

Прежде, чем мы перейдём к более практическим примерам, давайте посмотрим, что возвращает get_terms() при помощи PHP-функции print_r().

print_r( get_terms( array( 'taxonomy' => 'category' ) ) );
/*
Array
(
    [2] => WP_Term Object
        (
            [term_id] => 42
            [name] => Лайфстайл
            [slug] => lajfstajl
            [term_group] => 0
            [term_taxonomy_id] => 42
            [taxonomy] => category
            [description] => 
            [parent] => 0
            [count] => 1
            [filter] => raw
            [order] => 0
        )
 
    [4] => WP_Term Object
        (
            [term_id] => 1
            [name] => Трэвел
            [slug] => travel
            [term_group] => 0
            [term_taxonomy_id] => 1
            [taxonomy] => category
            [description] => 
            [parent] => 0
            [count] => 4
            [filter] => raw
            [order] => 4
        )
 
)
*/

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

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

// вытаскиваем все рубрики в массив $categories, описание параметров функции смотрите чуть ниже
$categories = get_terms( array( 'taxonomy' => '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>';
}

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

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

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

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

$number = 5; // ради интереса вынесем переменную отдельно
$args = array(
	'taxonomy' => 'category',
	'number' => $number,
	'orderby' => 'count',
	'order' => 'DESC',
);
$terms = get_terms( $args );
if( $terms ){
	echo '<ul>';
	foreach( $terms as $term ) {
		echo '<li>' . $term->name . ' (' . $term->count . ')</li>';
	}
	echo '</ul>';
}
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии