Pobierz taksonomię typu posta

13

Biorąc pod uwagę taksonomię lub termin, czy możliwe jest pobranie dowolnego / wszystkich typów postów, do których dołączona jest taksonomia?

Na przykład, znając wbudowaną taksonomię categorylub określając termin w categorytaksonomii, czy istnieje funkcja inżynierii wstecznej, która categoryjest taksonomią post?

Niepotrzebne informacje

Pracuję z niektórymi niestandardowymi polami w kategoriach taksonomicznych, które konkretnie muszą znać typ wpisu, ale jeśli parametr typu wpisu w adresie URL nie istnieje, z jakiegokolwiek powodu mam problemy.

Howdy_McGee
źródło

Odpowiedzi:

12

Jeśli zaglądamy do $wp_taxonomieszmiennej globalnej , widzimy powiązane typy obiektów.

Mogą istnieć lepsze sposoby wykonania tej czynności lub nawet podstawowych funkcji, ale możesz wypróbować następujące czynności:

function wpse_172645_get_post_types_by_taxonomy( $tax = 'category' )
{
    global $wp_taxonomies;
    return ( isset( $wp_taxonomies[$tax] ) ) ? $wp_taxonomies[$tax]->object_type : array();
}

następnie za domyślną konfigurację otrzymasz:

$out = wpse_172645_get_post_types_by_taxonomy( 'category' );
print_r( $out );

z wyjściem:

Array
(
    [0] => post
)
birgire
źródło
8

Możesz zrobić odwrotnie get_object_taxonomies. Połącz to z, get_post_typesaby iterować typy postów, aby sprawdzić taksonomie zarejestrowane dla każdego z nich.

EDYCJA - Oto przykład, który daje takie same dane wyjściowe jak funkcja @ birgire, bez użycia brudnych globałów.

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;
}
Milo
źródło
3

Nie ma potrzeby używania $wp_taxonomieszmiennej globalnej bezpośrednio, ponieważ WordPress ma get_taxonomy()funkcję dostępu do taksonomii (w rdzeniu od wersji 2.3.0). Od WordPress 4.7.0 typem zwracanym jest WP_Taxonomyobiekt z właściwością$object_type

$taxonomy = get_taxonomy( 'category' );
print_r( $taxonomy->object_type );
JHoffmann
źródło