get_categories()
Получает категорий в виде массива объектов.
По каким критериям получить категории и как их отсортировать указывается в параметрах функции.
Параметры передаваемые этой функции очень похожи на параметры wp_list_categories(). Они также могут быть переданы в виде массива или строки запроса: type=post&order=DESC
.
Хуки из функции
Возвращает
Массив
.
- Массив объектов WP_Term (категорий).
- Пустой массив, если не удалось получить категории.
Шаблон использования
$categories = get_categories( [ 'taxonomy' => 'category', 'type' => 'post', 'child_of' => 0, 'parent' => '', 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => 1, 'hierarchical' => 1, 'exclude' => '', 'include' => '', 'number' => 0, 'pad_counts' => false, // полный список параметров смотрите в описании функции http://wp-kama.ru/function/get_terms ] ); if( $categories ){ foreach( $categories as $cat ){ // Данные в объекте $cat // $cat->term_id // $cat->name (Рубрика 1) // $cat->slug (rubrika-1) // $cat->term_group (0) // $cat->term_taxonomy_id (4) // $cat->taxonomy (category) // $cat->description (Текст описания) // $cat->parent (0) // $cat->count (14) // $cat->object_id (2743) // $cat->cat_ID (4) // $cat->category_count (14) // $cat->category_description (Текст описания) // $cat->cat_name (Рубрика 1) // $cat->category_nicename (rubrika-1) // $cat->category_parent (0) } }
Использование
$categories = get_categories( $args );
- $args(массив|строка)
- Параметры для получения категорий.
По умолчанию: '' - предустановки
Аргументы $args
Полный список параметров смотрите в get_terms().
- taxonomy(строка)
- Название таксономии, которую нужно обрабатывать. Добавлено с версии 3.0.
По умолчанию: 'category' - type(строка)
Тип категорий, которые будут получены.
post
- категории для постов (по умолчанию);link
- разделы ссылок.
По умолчанию: "post"
- child_of(строка)
- Получить дочерние категории (включая все уровни вложенности), указанной категории. В параметре указывается ID родительской категории (категория, вложенные категории которой нужно показать).
- parent(число)
- Получает категории, родительская категория которых указана в этом параметре. Отличие от
child_of
в том, что будет показан один (только первый) уровень вложенности.
По умолчанию: '' - orderby(строка)
Сортировка полученных данных по определенным критериям. Например, по количеству постов в каждой категории или по названию категорий. Доступны следующие критерии:
id
илиterm_id
- по ID.name
- по названию. По умолчанию.count
- по полю count в term_taxonomy - по количеству записей.slug
- по альтернативному названию.description
- по описанию.term_group
- по группе.term_group
- по группе.-
parent
- по полю parent. include
- по порядку указанному в параметре $includeslug__in
- с версии 4.9. В порядке указанном в параметре $slug.meta_value
- по значению произвольного поляmeta_value_num
- по значению произвольного поля, значение будет интерпретироваться как число, а не строка.ключ "meta_query"
- в параметре $meta_query мы можем указать параметры запроса по метаполям, и там же указать ключ для конкретного запроса. Этот ключ можно использовать как ключ для сортировки по соответствующему метаполю.none
- не сортировать
По умолчанию: "name"
- order(строка)
Направление сортировки, указанной в параметре "orderby":
ASC
- по порядку, от меньшего к большему (1, 2, 3; a, b, c);DESC
- в обратном порядке, от большего к меньшему (3, 2, 1; c, b, a).
По умолчанию: "ASC"
- hide_empty(логический)
Получать или нет пустые категории (не имеющие записей):
1
(true) - не получать пустые,0
(false) - получать пустые.
По умолчанию: true
- hierarchical(логический)
- Если параметр установлен в true, то в результат будут включены пустые дочерние категории, дочерние категории которых имеют записи (непустые).
По умолчанию: true - exclude(строка/массив)
- Исключить какие-либо категории из списка. Нужно указывать ID категорий через запятую или в массиве. Если этот параметр указан, параметр child_of будет отменен.
По умолчанию: '' - include(строка/массив)
- Вывести списком только указанные категории. Указывать нужно ID категорий через запятую или в массиве.
По умолчанию: '' - number(число)
- Лимит. Число категорий, которые будут получены. По умолчанию без ограничений - будут получены все категории.
- pad_counts(логический)
- Если передать true, то число которое показывает количество записей в родительских категориях будет суммой своих записей и записей из дочерних категорий.
По умолчанию: false
Примеры
#1 Список категорий и их описание
Этот пример покажет нам как можно вывести списком ссылки на категории, где сразу после каждой ссылки будет идти описание категории (указывается при создании/редактировании категории):
<?php $categories = get_categories( [ 'orderby' => 'name', 'order' => 'ASC' ] ); foreach( $categories as $category ){ echo '<p>Category: <a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.'</a> </p> '; echo '<p> Description:'. $category->description . '</p>'; echo '<p> Post Count: '. (int) $category->count . '</p>'; } ?>
#2 Получение только категорий верхнего уровня
Для этого, установите значение 'parent' => 0
. Этот пример получает ссылку и название категорий верхнего уровня.
$cats = get_categories( array( 'orderby' => 'name', 'parent' => 0 ) ); foreach ( $cats as $cat ) { printf( '<a href="%1$s">%2$s</a><br />', esc_url( get_category_link( $cat->term_id ) ), esc_html( $cat->name ) ); }
#3 Выпадающий список
Для того, чтобы создать выпадающий список из категорий мы можем воспользоваться другой специальной для этой цели, функцией wp_dropdown_categories():
wp_dropdown_categories( [ 'hide_empty' => 0, 'name' => 'category_parent', 'orderby' => 'name', 'selected' => $category->parent, 'hierarchical' => true, 'show_option_none' => __('None') ] );
Однако с таким подходом мы лишимся определенной гибкости в настройке списка, так как мы получи уже полностью сформированный список.
Поэтому, в некоторых случаях будет логичнее создать выпадающий список с помощью этой функции - get_categories(). Пример (предполагается что нам нужно вывести подкатегории (дочерние) категории 10):
<select name="event-dropdown" onchange="document.location.href = this.options[ this.selectedIndex ].value;"> <option value=""><?php echo esc_attr( 'Выберите событие' ); ?></option> <?php $categories = get_categories( 'child_of=10' ); foreach( $categories as $category ){ $option = '<option value="' . get_term_link( $category ) . '">'; $option .= $category->name; $option .= ' (' . $category->count . ')'; $option .= '</option>'; echo $option; } ?> </select>
#4 Получим только категории в которых есть посты
По умолчанию функция get_category() возвращает ТОЛЬКО категории, в которых есть посты (не пустые категории). Это означает, что если для категории не назначен пост, то такая категория не будет получена.
Чтобы этого избежать и показать все категории независимо есть в ней посты или нет, нужно указать параметр 'hide_empty' => false
:
$args = array( 'hide_empty' => false, ); $cats = get_categories( $args ); // вернет все категории (включая пустые)
Заметки
- Смотрите: get_terms() Type of arguments that can be changed.
Список изменений
С версии 2.1.0 | Введена. |