Вывод категорий (групп) в WP, вывод таксономии get_terms()

С помощью функции get_terms() можно получить элементы таксономий и настроить их вывод на экран.

Работает на основе класса: WP_Term_Query().

Применение:

get_terms( $args, $deprecated );

Где:

$args (строка/массив) — аргумент или массив аргументов, которые может принимать функция (необязательно).

По умолчанию: Стандартный массив объектов для таксономии ‘category’.

$deprecated (строка/массив) — если указать второй параметр, то будет задействована устаревшая версия функции (необязательно).

По умолчанию: нет

Применение устаревшей версии:

get_terms( $taxonomia, $args );

Где:

$taxonomia (строка/массив) — название таксономии, элементы которой надо получить (обязательно).

По умолчанию: нет.

$args (строка/массив) — аргумент или массив аргументов (необязательно).

По умолчанию: Стандартный массив аргументов.

Поэтому с версии WP 4.5 второй параметр в функции указывать не обязательно, а название таксономии можно прописать, как значение аргумента taxonomy в первом массиве $args.

Шаблон функции со всеми аргументами

$args = array(
    'taxonomy'               => 'category',
    'orderby'                => 'name',
    'order'                  => 'ASC',
    'hide_empty'             => true,
    'exclude'                => '',
    'exclude_tree'           => '',
    'include'                => array(),
    'number'                 => '',
    'fields'                 => 'all',
    'slug'                   => '', 
    'parent'                 => '',
    'hierarchical'           => true,
    'child_of'               => 0,
    'childless'              => false,
    'get'                    => '',
    'name__like'             => '',
    'pad_counts'             => false,
    'offset'                 => '',
    'search'                 => '',
    'name'                   => '',
    'cache_domain'           => 'core',
    'update_term_meta_cache' => true,
    'object_ids'             => null,
    'meta_value'             => '',
    'meta_key'               => '',
    'meta_query'             => '',
    'suppress_filter'        => false,
);
$terms = get_terms($args);
 
foreach($terms as $term){      
    echo print_r($term);
}

Аргументы массива $args

taxonomy

‘taxonomy’ => ‘my_tax’, (строка/массив) — Название таксономии, элементы которой требуется получить (обязательно).

Также можно указать массив имен: ‘taxonomy’ => array( ‘my_tax’, ‘my_tag’ ).

По умолчанию: нет.



orderby

‘orderby’ => ‘name’, (строка) — Метод сортировки термов (необязательно).

Возможные значения:

‘id’ или ‘term_id’ — сортировка по id.
‘name’ — по названию элемента.
‘count’ — по количеству записей.
‘slug’ — по ярлыку элемента.
‘term_group’ — по группе (внедрение не завершено, использование не рекомендуется).
‘parent’ — по значению аргумента parent.
‘include’ — в строгом порядке указанном в аргументе include.
‘slug__in’ — в строгом порядке указанном в аргументе slug.
‘description’ — по первым буквам краткого описания в алфавитном порядке.
‘meta_value’ — по значению аргумента meta_value.
‘meta_value_num’ — по значению аргумента meta_value, если значение является числом, а не строкой.
‘Ключ_запроса’ — сортировка по ключу (key) из аргумента meta_query.
‘none’ — не проводить сортировку.

По умолчанию: ‘name’.



order

‘order’ => ‘ASC’, (строка) — направление сортировки (необязательно).

Возможные значения:

‘ASC’ — по возрастанию (1, 2, 3; a, b, c).
‘DESC’ — по убыванию (3, 2, 1; c, b, a).

По умолчанию: ‘ASC’.



hide_empty

‘hide_empty’ => true, (логическое) — Исключать/Не исключать из результата термы, за которыми нет закрепленных записей. (необязательно).

true — не исключать.
false — исключить.

По умолчанию: true.



exclude

‘exclude’ => », (число/массив) — id элемента или массив из нескольких id (через запятую), которые надо исключить из результата (необязательно).

По умолчанию: ‘ ‘ (нет).



exclude_tree

‘exclude_tree’ => », (число/массив) — id или массив id родительских элементов, ветки которых требуется исключить из результата. Исключена будет вся ветка. (необязательно).

По умолчанию: ‘ ‘ (нет).



include

‘include’ => », (число/массив) — id элемента или массив из нескольких id (через запятую), которые требуется включить в результат (необязательно).

По умолчанию: ‘ ‘.



number

‘number’ => », (число) — число, ограничивающие количество элементов, которые требуется получить (необязательно).

По умолчанию: ‘ ‘ (будут получены все элементы указанной таксономии).



fields

‘fields’ => ‘all’, (строка) — значение этого аргумента определяет какие данные будет возвращать функция (необязательно).

Возможные значения:

all — вернуть массив со всеми данными об элементах указанной таксономии.
ids — вернуть массив идентификаторов (id).
names — вернуть массив названий элементов.
count — вернуть количество найденных термов.
id=>parent — вернуть ассоциированный массив, где ключ является id терма, а значение — id родительского терма. Если родителя нет, то будет возвращен 0.
id=>slug — вернуть массив, где ключ — id терма, а значение — ярлык терма.
id=>name — вернуть массив, где ключ — id терма, а значение его название.

По умолчанию: ‘all’.



slug

‘slug’ => ‘all’, (строка/массив) — Здесь можно указать ярлык или массив ярлыков элементов, по которым будет осуществляется выборка (необязательно).

По умолчанию: ‘ ‘.



parent

‘parent’ => ‘all’, (число) — Получить дочерние элементы по id родителя. Будет возвращен только первый уровень вложенности. Если указать 0, то будут получены все родительские термы без потомков (необязательно).

По умолчанию: ‘ ‘.



hierarchical

‘hierarchical’ => true, (логическое) — Включать/Не включать в результат пустые родительские термы, но у которых есть не пустые дочерние элементы (с закрепленными записями) (необязательно).

true — включать.
false — не включать.

По умолчанию: true.



child_of

‘child_of’ => true, (число) — Включить в результат все дочерние элементы только того родительского терма, id которого указан в значении аргумента (необязательно).

По умолчанию: 0.



childless

‘childless’ => true, (логическое) — При значении true получит термы, у которых нет потомков (необязательно).

true — термы без потомков.
false — все термы.

По умолчанию: false.



get

‘get’ => », (строка) — Если задать ‘all’ — то автоматически изменятся значения аргументов: childless, child_of, hide_empty, hierarchical и pad_counts. Все значения перечисленных аргументов принудительно примут false или 0 (необязательно).

По умолчанию: ‘ ‘.



name__like

‘name__like’ => », (строка) — Получит все термы, в названиях которых найдется указанная строка. Выборка может происходить даже по одному символу (необязательно).

По умолчанию: ‘ ‘.



description__like

‘description__like’ => », (строка) — Получит все термы, в описаниях которых найдется указанная строка (необязательно).

По умолчанию: ‘ ‘.



pad_counts

‘pad_counts’ => false, (логическое) — Суммировать или не суммировать количество записей в родительских и дочерних категориях (необязательно).

true — Суммировать.
false — Не суммировать.

По умолчанию: false.



offset

‘offset’ => », (число) — Верхний отступ в запросе. Число в значении означает сколько первых элементов будет пропущено (необязательно).

По умолчанию: ‘ ‘.



search

‘search’ => », (строка) — Получит все термы, в названиях или ярлыках которых будет найдено указанное слово. Выборка будет происходить по словам, а не по символам, как в аргументе ‘name__like’ (необязательно).

По умолчанию: ‘ ‘.



name

‘name’ => », (строка/массив) — Получит все термы, названия которых будут полностью совпадать с указанным значением. Выборка будет происходить полному названию терма (необязательно).

По умолчанию: ‘ ‘.



cache_domain

‘cache_domain’ => ‘core’, (строка) — Уникальный ключ кеша, который позволяет не перезаписывать кеш для одинаковых запросов, если функция get_terms() используется несколько раз (необязательно).

По умолчанию: ‘core’.



update_term_meta_cache

‘update_term_meta_cache’ => true, (логическое) — Подгружать или не подгружать кеш метаданных (необязательно).

true — Подгружать (кеш будет подгружаться только для полученных элементов).
false — Не подгружать.

По умолчанию: true.



object_ids

‘object_ids’ => 9, 12, 57, (число/массив) — id или массив из id записей. Выборка термов будет происходить по id закрепленных записей, т.е. по полю object_id в таблице wp_term_relationships (необязательно).

По умолчанию: все id записей закрепленных за термом.



term_taxonomy_id

‘term_taxonomy_id’ => », (число/массив) — Здесь можно указать id или массив из id термов, которые требуется получить (необязательно).

По умолчанию: ‘ ‘.



meta_query

‘meta_query’ => », (массив) — Получение данных по полям meta_key и meta_value таблицы wp_termmeta (необязательно).

По умолчанию: ‘ ‘.



meta_key

‘meta_key’ => », (массив) — Получение данных по полю meta_key (необязательно).

По умолчанию: ‘ ‘.



meta_value

‘meta_value’ => », (массив) — Получение данных по полю meta_value (необязательно).

По умолчанию: ‘ ‘.



suppress_filter

‘suppress_filter’ => false, (логическое) — Отключить/Не отключать работу хука get_terms для текущего запроса (необязательно).

true — Отключить хук.
false — Не отключать хук.

По умолчанию: false.

 

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

Если значение аргумента fields осталось по умолчанию, то на каждом витке цикла foreach($terms as $term):

$terms = get_terms($args);
foreach($terms as $term){      
    echo print_r($term);
}

Переменная $term будет принимать следующие данные:

term_id — id терма.
name — название терма.
slug — ярлык.
term_group — группа.
term_taxonomy_id — id таксономии.
taxonomy — название таксономии.
description — описание терма.
parent — id родителя.
count — количество прикрепленных записей.
filter — тип фильтрации.

 

Хуки функции

В арсенале функции get_terms() предусмотрен одноименный хук-фильтр get_terms.

Применение:

add_filter('get_terms', 'get_terms_filter', 10, 3);
function get_terms_filter($array, $int, $int){
    // Какое-то действие
    return $array;
}

Отключение фильтра:

remove_filter('get_terms', 'get_terms_filter', 10, 3);

 

Примеры использования

1. Получим все категории, упорядоченные по количеству записей.

Синтаксис строки:

$categories = get_terms('category', 'orderby=count&hide_empty=0');

Синтаксис массива:

$categories = get_terms('category', array(
    'orderby'    => 'count',
    'hide_empty' => 0
));

2. Выведем названия всех термов в виде списка.

Без ссылки:

$terms = get_terms('category');
if (!empty($terms) && !is_wp_error($terms)){
    echo '<ul>';
    foreach ($terms as $term){
        echo '<li>'.$term->name.'</li>';
    }
    echo '</ul>';
}

С ссылкой:

$terms = get_terms('category');
if( $terms && ! is_wp_error($terms) ){
    echo "<ul>";
    foreach($terms as $term){
        echo '<li><a href="'.get_term_link($term).'">'.$term->name.'</a></li>';
    }
    echo "</ul>";
}

3. Выведем все категории и подкатегории в виде выпадающего списка:

$taxonomies = get_terms(array(
    'taxonomy' => 'category',
    'hide_empty' => false
) );
  
if (!empty($taxonomies)) :
    $output = '<select>';
    foreach($taxonomies as $category){
        if($category->parent == 0){
            $output.= '<optgroup label="'.esc_attr($category->name).'">';
            foreach($taxonomies as $subcategory){
                if($subcategory->parent == $category->term_id){
                $output.= '<option value="'.esc_attr($subcategory->term_id).'">
                    '.esc_html( $subcategory->name ) .'</option>';
                }
            }
            $output.='</optgroup>';
        }
    }
    $output.='</select>';
    echo $output;
endif;

4. Пример работы с мета-полями.

Выведем дочерние термы с миниатюрами на странице родителя по значению аргумента meta_query

$ags = array(
    'taxonomy'   => 'category',
    'parent'     => get_query_var('cat'),
    'meta_query' => array(
        array(
            'key' => 'id-cat-images',
        )),
);
$terms = get_terms($ags);
$count = count($terms);
if($count > 0){
    echo '<div class="cat-thumbnail"><ul>';
    foreach ($terms as $term) {
        $term_taxonomy_id = $term->term_taxonomy_id;
        $image_id = get_term_meta ( $term_taxonomy_id, 'id-cat-images', true );
    echo '<li>
       <a href="' . get_category_link($term_taxonomy_id) . '">' . wp_get_attachment_image ( $image_id, 'thumbnail' ) . '</a>
       <a href="' . get_category_link($term_taxonomy_id) . '">' . $term->name . '</a>
       </li>';
    }
    echo '</ul></div>';
}

На основе get_terms() работают функции: get_categories(), wp_count_terms(), wp_get_nav_menus(), get_tags(), get_term_by(), get_all_category_ids().

 

Таблица изменений

Версия Дата Описание
2.3.0 24.09.2007 Внедрение
4.2.0 23.04.2015 Введены аргументы name и childless
4.4.0 08.12.2015 Введена возможность указывать ‘term_id’ в качестве значения для аргумента orderby, действует как синоним ‘id’. Введены аргументы meta_query и update_term_meta_cache. Функция преобразована, чтобы возвращать список объектов WP_Term.
4.5.0 12.04.2016 Изменена структура функции. Массив $args может быть представлен первым параметром. Добавлены аргументы meta_key и meta_value. Введены новые значения сортировки для аргумента orderby, такие как: ‘meta_value’, ‘meta_value_num’, ‘Ключ_запроса’.
4.8.0 08.06.2017 Введен аргумент suppress_filter

Файл: wp-includes/taxonomy.php

Источник: https://seo-mayak.com/kodex/get_terms