get_object_taxonomies()WP 2.3.0

Получает таксономии относящиеся к указанному типу записи (типу поста) или к переданному объекту.

Не делает запросов, а просто сверяет данные из глобальной переменной $wp_taxonomies.

1 раз — 0.0000272 сек (очень быстро) | 50000 раз — 0.19 сек (очень быстро) | PHP 7.4.25, WP 6.0.1

Хуков нет.

Возвращает

Строку[]|WP_Taxonomy[]. Все названия или объекты таксономий относящихся к указанному типу записи или другому объекту.

Использование

get_object_taxonomies( $object, $output = 'names' );
$object(строка/строка[]/WP_Post) (обязательный)
Название типа записи, массив названий типов записей или объект отдельной записи (WP_Post, $post).
$output(строка)

В каком виде возвращать результат. Может быть:

names - вернет только названия таксономий
objects - вернет объекты таксономий

По умолчанию: 'names'

Примеры

1

#1 Названия таксономий для типа поста

$taxonomy_names = get_object_taxonomies( 'post' );
print_r( $taxonomy_names);

/*
выведет:

Array
(
	[0] => category
	[1] => post_tag
	[2] => post_format
)
*/
0

#2 Объекты таксономии для типа поста

Аналогичный предыдущему пример, который вернет таксономии относящиеся к типу поста в виде объектов данных для каждой таксономии:

$taxonomy_objects = get_object_taxonomies( 'post', 'objects' );
print_r( $taxonomy_objects );

/*
выведет:

Array
(
	[category] => stdClass Object
		(
			[hierarchical] => 1
			[update_count_callback] =>
			[rewrite] =>
			[query_var] => category_name
			[public] => 1
			[show_ui] => 1
			[show_tagcloud] => 1
			[_builtin] => 1
			[labels] => stdClass Object
				(
					...
				)

			...

			[name] => category
			[label] => Categories
		)

	[post_tag] => stdClass Object
		(
			...
		)

	[post_format] => stdClass Object
		(
			....
		)

)
*/
0

#3 Названия таксономий для объекта записи

Чтобы получить названия таксономий поддерживаемых текущим постом, нужно вместо названия типа поста передать весь объект поста:

add_action('wp_head','get_current_post_taxonomies');
function get_current_post_taxonomies(){
	global $post;

	$taxonomy_names = get_object_taxonomies( $post );
	print_r( $taxonomy_names );
}

/*
выведет:

Array
(
	[0] => category
	[1] => post_tag
	[2] => post_format
)
*/
0

#4 Получим таксономии нескольких типов записей

Допустим у нас есть два типа записи с таксономиями: post (родной) и mypost (произвольный), тогда:

$tax_names = get_object_taxonomies( array('post','mypost') );

/* $tax_names
Array
(
	[0] => category    // такса post
	[1] => post_tag    // такса post
	[2] => post_format // такса post
	[3] => mypost_tag  // такса mypost
	[4] => mypost_cat  // такса mypost
)
*/

Заметки

  • Global. WP_Taxonomy[]. $wp_taxonomies The registered taxonomies.

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

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

Код get_object_taxonomies() WP 6.5.2

function get_object_taxonomies( $object_type, $output = 'names' ) {
	global $wp_taxonomies;

	if ( is_object( $object_type ) ) {
		if ( 'attachment' === $object_type->post_type ) {
			return get_attachment_taxonomies( $object_type, $output );
		}
		$object_type = $object_type->post_type;
	}

	$object_type = (array) $object_type;

	$taxonomies = array();
	foreach ( (array) $wp_taxonomies as $tax_name => $tax_obj ) {
		if ( array_intersect( $object_type, (array) $tax_obj->object_type ) ) {
			if ( 'names' === $output ) {
				$taxonomies[] = $tax_name;
			} else {
				$taxonomies[ $tax_name ] = $tax_obj;
			}
		}
	}

	return $taxonomies;
}