Функция get_categories()
используется для получения списка объектов категорий на основе различных параметров. Она возвращает массив объектов категорий, которые можно использовать для создания списков категорий, отображения их в меню или других нужд в теме или плагине WordPress.
get_categories( string|array $args = '' ): array
Параметры
- $args (строка|массив) (необязательный)
Массив аргументов для получения категорий. Аргументы аналогичны тем, которые используются в функцииget_terms()
. Основные аргументы включают:'orderby'
— Сортировка категорий (например,'name'
,'count'
,'ID'
).'order'
— Порядок сортировки:'ASC'
(по возрастанию) или'DESC'
(по убыванию).'hide_empty'
— Показывать только категории с записями (по умолчаниюtrue
).'parent'
— ID родительской категории (если0
, вернутся только родительские категории).'taxonomy'
— Таксономия для получения категорий (по умолчанию'category'
).
Все аргументы функции get_categories()
- taxonomy (строка/массив, по умолчанию:
'category'
)
Таксономия, для которой нужно получить термины. Можно указать несколько таксономий в виде массива. Пример:
$args = array( 'taxonomy' => 'category' );
- number (число, по умолчанию: все)
Максимальное количество возвращаемых категорий. - object_ids (число/массив)
ID записей, к которым прикреплены категории. - include (строка/массив, по умолчанию: пусто)
ID категорий, которые нужно включить в результат. - exclude (строка/массив, по умолчанию: пусто)
ID категорий, которые нужно исключить из результата. - exclude_tree (строка/массив, по умолчанию: пусто)
ID родительских категорий, которые нужно исключить вместе с их потомками. - offset (число, по умолчанию: 0)
Смещение при запросе, сколько первых элементов пропустить. - orderby (строка, по умолчанию:
'name'
)
Поле для сортировки категорий. Допустимые значения:'id'
или'term_id''name''count''slug''description''term_group''parent''meta_value'
Пример:
$args = array( 'orderby' => 'name', 'order' => 'ASC' );
- order (строка, по умолчанию:
'ASC'
)
Направление сортировки:'ASC'
(по возрастанию) или'DESC'
(по убыванию). - hide_empty (логический, по умолчанию: true)
Показывать только те категории, которые содержат записи. - fields (строка, по умолчанию:
'all'
)
Указывает, какие данные возвращать:'all'
— массив объектов категорий.'ids'
— массив ID категорий.'names'
— массив названий категорий.
- count (логический, по умолчанию: false)
Возвращать только количество категорий, если установлено вtrue
. - slug (строка/массив, по умолчанию: пусто)
Возвращает категории по указанным слагам. - hierarchical (логический, по умолчанию: true)
Включать ли в результат категории с дочерними категориями. - search (строка, по умолчанию: пусто)
Поиск категорий по имени или слагу. - name (строка/массив, по умолчанию: пусто)
Поиск категорий по полному названию. - name__like (строка, по умолчанию: пусто)
Поиск категорий по частичному совпадению в названии. - description__like (строка, по умолчанию: пусто)
Поиск категорий по частичному совпадению в описании. - pad_counts (логический, по умолчанию: false)
Еслиtrue
, количество записей в родительских категориях будет включать количество записей в дочерних категориях. - get (строка, по умолчанию: пусто)
Значение'all'
отключает некоторые параметры, такие какchildless
,child_of
,hide_empty
,hierarchical
иpad_counts
. - child_of (число, по умолчанию: 0)
Получение категорий, которые являются потомками указанной категории. - childless (логический, по умолчанию: false)
Исключить категории, у которых есть дочерние категории. - parent (число, по умолчанию: пусто)
Получить только прямых потомков указанной категории. - term_taxonomy_id (число/массив, по умолчанию: пусто)
Получить категории по ихterm_taxonomy_id
. - cache_domain (строка, по умолчанию:
'core'
)
Уникальный ключ кэша для использования в get_terms(). - update_term_meta_cache (логический, по умолчанию: true)
Загружать ли кэш метаданных для полученных категорий. - meta_query (массив)
Запрос для получения категорий на основе метаданных. - meta_key (строка, по умолчанию: пусто)
Ключ метаданных для фильтрации категорий. - meta_value (строка, по умолчанию: пусто)
Значение метаданных для фильтрации категорий. - suppress_filter (логический, по умолчанию: false)
Подавлять ли фильтры для текущего запроса. - cache_results (логический, по умолчанию: true)
Нужно ли кэшировать результаты. Введено в WordPress 6.4.
Возвращаемое значение
- array — Массив объектов категорий. Если категории не найдены, возвращается пустой массив.
Пример 1: Список всех категорий
Этот пример выводит список всех категорий в алфавитном порядке, включая ссылки на архивы каждой категории и количество записей в ней.
<?php
$categories = get_categories( array(
'orderby' => 'name',
'order' => 'ASC',
) );
foreach ( $categories as $category ) {
// Формируем ссылку на архив категории
$category_link = sprintf(
'<a href="%1$s" alt="%2$s">%3$s</a>',
esc_url( get_category_link( $category->term_id ) ),
esc_attr( sprintf( __( 'Просмотреть все записи в %s', 'textdomain' ), $category->name ) ),
esc_html( $category->name )
);
echo '<p>' . $category_link . '</p>';
echo '<p>Описание: ' . esc_html( $category->description ) . '</p>';
echo '<p>Количество записей: ' . esc_html( $category->count ) . '</p>';
}
?>
Пример 2: Получение категорий, включая пустые
По умолчанию функция get_categories()
возвращает только категории, которые содержат записи. Чтобы получить все категории, включая те, в которых нет записей, можно использовать параметр 'hide_empty' => false
:
<?php
$categories = get_categories( array(
'hide_empty' => false,
) );
// Выводим названия всех категорий, включая пустые
foreach ( $categories as $category ) {
echo '<p>Категория: ' . esc_html( $category->name ) . '</p>';
}
?>
Пример 3: Получение только родительских категорий
Чтобы получить только родительские категории, можно использовать параметр 'parent' => 0
. Этот параметр исключает подкатегории:
<?php
$categories = get_categories( array(
'parent' => 0,
'orderby' => 'name',
) );
foreach ( $categories as $category ) {
echo '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '">' . esc_html( $category->name ) . '</a><br />';
}
?>
Пример 4: Меню с родительской категорией и её подкатегориями
Этот пример демонстрирует создание меню с родительской категорией и её подкатегориями, которое можно использовать, например, в сайдбаре:
<div class="category-menu-container">
<ul class="category-menu">
<li class="unstyled">
<h4 class="category-menu-heading">
<?php echo get_cat_name( $category_id = 12 ); // ID родительской категории ?>
</h4>
</li>
<?php
$categories = get_categories( array(
'orderby' => 'name',
'order' => 'ASC',
'parent' => 12, // ID родительской категории
) );
foreach ( $categories as $category ) {
$category_link = sprintf(
'<a href="%1$s" alt="%2$s">%3$s</a>',
esc_url( get_category_link( $category->term_id ) ),
esc_attr( sprintf( __( 'Просмотреть все записи в %s', 'textdomain' ), $category->name ) ),
esc_html( $category->name )
);
echo '<p>' . $category_link . '</p>';
}
?>
</ul>
</div>
Пример 5: Получение всех подкатегорий
Для получения всех подкатегорий можно написать рекурсивную функцию, которая будет обходить дерево категорий:
<?php
function get_child_categories( $parent_id ) {
$categories = get_categories( array(
'parent' => $parent_id,
'hide_empty' => false,
) );
if ( ! empty( $categories ) ) {
echo '<ul>';
foreach ( $categories as $category ) {
echo '<li>' . esc_html( $category->name );
get_child_categories( $category->term_id ); // Рекурсивный вызов для получения подкатегорий
echo '</li>';
}
echo '</ul>';
}
}
// Вывод всех категорий и их подкатегорий
get_child_categories( 0 );
?>
Пример 6: Выпадающий список категорий
Создание выпадающего списка категорий можно сделать с помощью функции wp_dropdown_categories()
. Это удобный способ, если вам нужно предоставить пользователю выбор категории:
<?php
wp_dropdown_categories( array(
'show_option_none' => __( 'Выберите категорию', 'textdomain' ),
'hide_empty' => 0,
'hierarchical' => true,
) );
?>
Заключение
Функция get_categories()
в WordPress — мощный инструмент для работы с категориями. Она позволяет гибко настраивать запросы, получать как родительские, так и дочерние категории, выводить их в виде списка, меню или выпадающего списка. Разнообразие параметров делает её удобной для использования в различных задачах тем и плагинов.