Holen Sie sich den Beitragstyp, an den eine Taxonomie angehängt ist

13

Ist es möglich, mit einer Taxonomie oder einem Begriff einen oder alle Beitragstypen abzurufen, denen die Taxonomie zugeordnet ist?

Wenn Sie beispielsweise die eingebaute Taxonomie kennen categoryoder einen Begriff in der categoryTaxonomie erhalten, gibt es eine Funktion zum Reverse Engineering, categorydie eine Taxonomie von ist post?

Nicht benötigte Informationen

Ich arbeite mit einigen benutzerdefinierten Feldern in Taxonomie-Begriffen, die speziell den Beitragstyp kennen müssen, aber wenn der Beitragstyp-Parameter in der URL aus irgendeinem Grund nicht vorhanden ist, habe ich Probleme.

Howdy_McGee
quelle

Antworten:

12

Wenn wir in die globale $wp_taxonomiesVariable schauen, sehen wir die zugehörigen Objekttypen.

Es gibt möglicherweise bessere Möglichkeiten, dies oder sogar Kernfunktionen zu tun, aber Sie können Folgendes versuchen:

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

dann erhalten Sie für das Standard-Setup:

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

mit der Ausgabe:

Array
(
    [0] => post
)
Birgire
quelle
8

Sie können das Gegenteil mit tun get_object_taxonomies. Kombinieren Sie es mit get_post_types, um die Beitragstypen zu durchlaufen und die für jeden registrierten Taxonomien zu überprüfen.

BEARBEITEN - Hier ist ein Beispiel, das dieselbe Ausgabe wie die Funktion von @ birgire erzeugt, ohne schmutzige Globals zu verwenden.

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
quelle
3

Es ist nicht erforderlich, die $wp_taxonomiesglobale Variable direkt zu verwenden, da WordPress die get_taxonomy()Funktion hat, auf Taxonomien zuzugreifen (im Kern seit Version 2.3.0). Seit WordPress 4.7.0 ist der Rückgabetyp ein WP_TaxonomyObjekt mit der Eigenschaft$object_type

$taxonomy = get_taxonomy( 'category' );
print_r( $taxonomy->object_type );
JHoffmann
quelle