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