wp_get_post_categories()WP 2.1.0

Получает список категорий (рубрик) поста (записи) в виде массива.

Функция является оберткой для функции wp_get_object_terms() и создана для тех, кто плохо разбирается в понятии "таксономии WordPress", но понимает что такое рубрики, что по сути является одним и тем же.

Результат этой функции не кэшируются, поэтому запрос в базу данных делается при каждом вызове функции. Используйте эту функцию с осторожностью. Для повышения производительности следует использовать функции типа get_the_category(), результат работы которых кэшируется.

Работает на основе: wp_get_object_terms()
1 раз — 0.00111 сек (очень медленно) | 50000 раз — 43.9 сек (очень медленно)

Хуков нет.

Возвращает

Массив|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

#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 ];
}
0

#2 Демонстрация работы функции

Пример показывает, какой результат выводит базовое использование wp_get_post_categories():

$test = wp_get_post_categories( $post->ID );

print_r( $test );

/* Выведет:
Array
(
	[0] => 1
	[1] => 2
)
*/

echo $test[1]; // выведет: 2
0

#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>
*/

Заметки

Список изменений

С версии 2.1.0 Введена.

Код wp_get_post_categories() WP 6.1.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;
}