Отримати допис типу A Таксономія додається


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ітерацією для типів публікацій, щоб перевірити зареєстровані таксономії для кожного.

EDIT - Ось приклад, який дає такий же вихід, як і функція @ 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.