wp_get_post_categories()
Получает список категорий (рубрик) поста (записи) в виде массива.
Функция является оберткой для функции wp_get_object_terms() и создана для тех, кто плохо разбирается в понятии "таксономии WordPress", но понимает что такое рубрики, что по сути является одним и тем же.
Результат этой функции не кэшируются, поэтому запрос в базу данных делается при каждом вызове функции. Используйте эту функцию с осторожностью. Для повышения производительности следует использовать функции типа get_the_category(), результат работы которых кэшируется.
Хуков нет.
Возвращает
Массив|WP_Error
. Массив содержащий ID категорий.
List of categories. If the $fields argument passed via $args is 'all' or 'all_with_object_id', an array of WP_Term objects will be returned. If $fields is 'ids', an array of category IDs. If $fields is 'names', an array of category names. WP_Error object if 'category' taxonomy doesn't exist.
Использование
wp_get_post_categories( $post_id, $args );
- $post_id(число) (обязательный)
- ID поста, рубрики которого нужно получить.
- $args(массив)
- Аргументы получения рубрик.
По умолчанию: array('fields' => 'ids');
Аргументы $args
- orderby(строка)
По какому критерию сортировать результат. Может быть:
count
- по количеству записей;name
- по имени. По умолчанию;slug
- по слагу;none
- выводить без сортировки.
По умолчанию: 'name'
- order(строка)
- Направление сортировки.
ASC
— по порядку,DESC
— в обратном порядке.
По умолчанию: 'ASC' - fields(строка)
Какие поля включать в результирующий массив. Может быть:
all
- в результате мы получи массив объектов со всей информацией о каждом термине.ids
- получить только ID терминов.names
- получить только имена терминов.slugs
- получит только ярлыки терминов.all_with_object_id
- тоже что и all, плюс еще и ID терминов.-
tt_ids
- вернет ID таксономий терминов (внутренний ID для связи таблиц).Также возможны комбинированные варианты, например:
id=>name
- вернёт пару ID => Имя.-
id=>slug
- вернёт пару ID => Ярлык.По умолчанию: 'all'
Примеры
#1 Покажем информацию о категориях
В примере ниже показано, как получить категории поста, а затем собрать нужные данные в массив $cats.
$post_categories = wp_get_post_categories( $post_id ); $cats = array(); foreach( $post_categories as $c ){ $cat = get_category( $c ); $cats[] = [ 'name' => $cat->name, 'slug' => $cat->slug ]; }
#2 Демонстрация работы функции
Пример показывает, какой результат выводит базовое использование wp_get_post_categories():
$test = wp_get_post_categories( $post->ID ); print_r( $test ); /* Выведет: Array ( [0] => 1 [1] => 2 ) */ echo $test[1]; // выведет: 2
#3 Получим все данные категорий поста
$test = wp_get_post_categories( $post->ID, [ 'fields' => 'all' ] ); print_r( $test ); /* Выведет: Array ( [0] => stdClass Object ( [term_id] => 1 [name] => Без рубрики [slug] => bez-rubriki [term_group] => 0 [term_taxonomy_id] => 1 [taxonomy] => category [description] => [parent] => 0 [count] => 2 [filter] => raw ) [1] => stdClass Object ( [term_id] => 2 [name] => Рубрика пробная [slug] => rubrika-probnaya [term_group] => 0 [term_taxonomy_id] => 2 [taxonomy] => category [description] => [parent] => 0 [count] => 1 [filter] => raw ) ) */ foreach( $test as $cat ){ echo $cat->name .'<br>'; } /* Выведет: Без рубрики<br> Рубрика пробная<br> */
Заметки
- Смотрите: wp_get_object_terms()
Список изменений
С версии 2.1.0 | Введена. |
Код wp_get_post_categories() wp get post categories WP 6.7.1
function wp_get_post_categories( $post_id = 0, $args = array() ) { $post_id = (int) $post_id; $defaults = array( 'fields' => 'ids' ); $args = wp_parse_args( $args, $defaults ); $cats = wp_get_object_terms( $post_id, 'category', $args ); return $cats; }