Вывод категорий (групп) в 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’ => ‘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’ => ‘ASC’, (строка) — направление сортировки (необязательно).
Возможные значения:
‘ASC’ — по возрастанию (1, 2, 3; a, b, c).
‘DESC’ — по убыванию (3, 2, 1; c, b, a).
По умолчанию: ‘ASC’.
‘hide_empty’ => true, (логическое) — Исключать/Не исключать из результата термы, за которыми нет закрепленных записей. (необязательно).
true — не исключать.
false — исключить.
По умолчанию: true.
‘exclude’ => », (число/массив) — id элемента или массив из нескольких id (через запятую), которые надо исключить из результата (необязательно).
По умолчанию: ‘ ‘ (нет).
‘exclude_tree’ => », (число/массив) — id или массив id родительских элементов, ветки которых требуется исключить из результата. Исключена будет вся ветка. (необязательно).
По умолчанию: ‘ ‘ (нет).
‘include’ => », (число/массив) — id элемента или массив из нескольких id (через запятую), которые требуется включить в результат (необязательно).
По умолчанию: ‘ ‘.
‘number’ => », (число) — число, ограничивающие количество элементов, которые требуется получить (необязательно).
По умолчанию: ‘ ‘ (будут получены все элементы указанной таксономии).
‘fields’ => ‘all’, (строка) — значение этого аргумента определяет какие данные будет возвращать функция (необязательно).
Возможные значения:
all — вернуть массив со всеми данными об элементах указанной таксономии.
ids — вернуть массив идентификаторов (id).
names — вернуть массив названий элементов.
count — вернуть количество найденных термов.
id=>parent — вернуть ассоциированный массив, где ключ является id терма, а значение — id родительского терма. Если родителя нет, то будет возвращен 0.
id=>slug — вернуть массив, где ключ — id терма, а значение — ярлык терма.
id=>name — вернуть массив, где ключ — id терма, а значение его название.
По умолчанию: ‘all’.
‘slug’ => ‘all’, (строка/массив) — Здесь можно указать ярлык или массив ярлыков элементов, по которым будет осуществляется выборка (необязательно).
По умолчанию: ‘ ‘.
‘parent’ => ‘all’, (число) — Получить дочерние элементы по id родителя. Будет возвращен только первый уровень вложенности. Если указать 0, то будут получены все родительские термы без потомков (необязательно).
По умолчанию: ‘ ‘.
‘hierarchical’ => true, (логическое) — Включать/Не включать в результат пустые родительские термы, но у которых есть не пустые дочерние элементы (с закрепленными записями) (необязательно).
true — включать.
false — не включать.
По умолчанию: true.
‘child_of’ => true, (число) — Включить в результат все дочерние элементы только того родительского терма, id которого указан в значении аргумента (необязательно).
По умолчанию: 0.
‘childless’ => true, (логическое) — При значении true получит термы, у которых нет потомков (необязательно).
true — термы без потомков.
false — все термы.
По умолчанию: false.
‘get’ => », (строка) — Если задать ‘all’ — то автоматически изменятся значения аргументов: childless, child_of, hide_empty, hierarchical и pad_counts. Все значения перечисленных аргументов принудительно примут false или 0 (необязательно).
По умолчанию: ‘ ‘.
‘name__like’ => », (строка) — Получит все термы, в названиях которых найдется указанная строка. Выборка может происходить даже по одному символу (необязательно).
По умолчанию: ‘ ‘.
‘description__like’ => », (строка) — Получит все термы, в описаниях которых найдется указанная строка (необязательно).
По умолчанию: ‘ ‘.
‘pad_counts’ => false, (логическое) — Суммировать или не суммировать количество записей в родительских и дочерних категориях (необязательно).
true — Суммировать.
false — Не суммировать.
По умолчанию: false.
‘offset’ => », (число) — Верхний отступ в запросе. Число в значении означает сколько первых элементов будет пропущено (необязательно).
По умолчанию: ‘ ‘.
‘search’ => », (строка) — Получит все термы, в названиях или ярлыках которых будет найдено указанное слово. Выборка будет происходить по словам, а не по символам, как в аргументе ‘name__like’ (необязательно).
По умолчанию: ‘ ‘.
‘name’ => », (строка/массив) — Получит все термы, названия которых будут полностью совпадать с указанным значением. Выборка будет происходить полному названию терма (необязательно).
По умолчанию: ‘ ‘.
‘cache_domain’ => ‘core’, (строка) — Уникальный ключ кеша, который позволяет не перезаписывать кеш для одинаковых запросов, если функция get_terms() используется несколько раз (необязательно).
По умолчанию: ‘core’.
‘update_term_meta_cache’ => true, (логическое) — Подгружать или не подгружать кеш метаданных (необязательно).
true — Подгружать (кеш будет подгружаться только для полученных элементов).
false — Не подгружать.
По умолчанию: true.
‘object_ids’ => 9, 12, 57, (число/массив) — id или массив из id записей. Выборка термов будет происходить по id закрепленных записей, т.е. по полю object_id в таблице wp_term_relationships (необязательно).
По умолчанию: все id записей закрепленных за термом.
‘term_taxonomy_id’ => », (число/массив) — Здесь можно указать id или массив из id термов, которые требуется получить (необязательно).
По умолчанию: ‘ ‘.
‘meta_query’ => », (массив) — Получение данных по полям meta_key и meta_value таблицы wp_termmeta (необязательно).
По умолчанию: ‘ ‘.
‘meta_key’ => », (массив) — Получение данных по полю meta_key (необязательно).
По умолчанию: ‘ ‘.
‘meta_value’ => », (массив) — Получение данных по полю meta_value (необязательно).
По умолчанию: ‘ ‘.
‘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
I’m not sure where you’re getting your info, but great topic. I needs to spend some time learning more or understanding more.
Thanks for magnificent info I was looking for this information for my mission.