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.8.3
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;
}