Получить Тип Записи, К Которому Прикреплена Таксономия
Учитывая таксономию или термин, возможно ли извлечь любые/все типы записей, к которым прикреплена таксономия?
Например, зная встроенную таксономию category
или получив термин в таксономии category
, есть ли функция для обратного проектирования, которая category
является таксономией post
?
Ненужная Информация
Я работаю с некоторыми пользовательскими полями в терминах таксономии, которые специально должны знать тип записи, но если параметр типа записи в URL-адреса там нет по какой-то причине, по которой я столкнулся с проблемами.
3 answers
Если мы заглянем в глобальную переменную $wp_taxonomies
, мы увидим связанные типы объектов.
Возможно, есть лучшие способы сделать это или даже основные функции, но вы можете попробовать следующее:
function wpse_172645_get_post_types_by_taxonomy( $tax = 'category' )
{
global $wp_taxonomies;
return ( isset( $wp_taxonomies[$tax] ) ) ? $wp_taxonomies[$tax]->object_type : array();
}
Затем для настройки по умолчанию вы получите:
$out = wpse_172645_get_post_types_by_taxonomy( 'category' );
print_r( $out );
С выводом:
Array
(
[0] => post
)
Вы можете сделать обратное с помощью get_object_taxonomies
. Объедините его с get_post_types
для перебора типов записей, чтобы проверить таксономии, зарегистрированные для каждого.
РЕДАКТИРОВАТЬ - Вот пример, который выдает тот же результат, что и функция @birgire, без использования грязных глобалов.
function wpse_172645_get_post_types_by_taxonomy( $tax = 'category' ){
$out = array();
$post_types = get_post_types();
foreach( $post_types as $post_type ){
$taxonomies = get_object_taxonomies( $post_type );
if( in_array( $tax, $taxonomies ) ){
$out[] = $post_type;
}
}
return $out;
}
Нет необходимости использовать глобальную переменную $wp_taxonomies
напрямую, так как WordPress имеет get_taxonomy()
функция для доступа к таксономиям в нем (в ядре с версии 2.3.0). Начиная с WordPress 4.7.0 тип возвращаемого значения является WP_Taxonomy
объект со свойством $object_type
$taxonomy = get_taxonomy( 'category' );
print_r( $taxonomy->object_type );