Получить тип сообщения Таксономия прилагается к


13

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

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

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

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

Ответы:


12

Если мы заглянем в глобальную $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
)

8

Вы можете сделать обратное с 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;
}

3

Нет необходимости использовать $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 );
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.