Получить Тип Записи, К Которому Прикреплена Таксономия


Учитывая таксономию или термин, возможно ли извлечь любые/все типы записей, к которым прикреплена таксономия?

Например, зная встроенную таксономию category или получив термин в таксономии category, есть ли функция для обратного проектирования, которая category является таксономией post ?

Ненужная Информация

Я работаю с некоторыми пользовательскими полями в терминах таксономии, которые специально должны знать тип записи, но если параметр типа записи в URL-адреса там нет по какой-то причине, по которой я столкнулся с проблемами.

Author: Howdy_McGee, 2014-12-18

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
)
 12
Author: birgire, 2014-12-18 18:08:12

Вы можете сделать обратное с помощью 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;
}
 8
Author: Milo, 2014-12-18 23:00:38

Нет необходимости использовать глобальную переменную $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 );
 6
Author: JHoffmann, 2018-10-08 20:47:15