Home News

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

01.09.2018

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

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


Код wp_nav_menu(), хуки, хранение данных в БД и вспомогательные функции. Урок #3

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

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

// вытаскиваем все рубрики в массив $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>' ; }

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

Слева — сам список (открытый), а справа его 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>' ; }
rss