Obtenez le type de publication Une taxonomie est attachée à

13

Étant donné une taxonomie ou un terme, est-il possible de tirer tous les types de messages auxquels la taxonomie est attachée?

Par exemple, connaissant la taxonomie intégrée categoryou étant donné un terme dans la categorytaxonomie, existe-t-il une fonction de rétro-ingénierie qui categoryest une taxonomie post?

Informations inutiles

Je travaille avec certains champs personnalisés en termes de taxonomie qui ont spécifiquement besoin de connaître le type de publication, mais si le paramètre de type de publication dans l'URL n'est pas là pour une raison quelconque, je rencontre des problèmes.

Howdy_McGee
la source

Réponses:

12

Si nous examinons la $wp_taxonomiesvariable globale , nous voyons les types d'objets associés.

Il peut y avoir de meilleures façons de faire cela ou même des fonctions de base, mais vous pouvez essayer ce qui suit:

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

puis pour la configuration par défaut, vous obtenez:

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

avec la sortie:

Array
(
    [0] => post
)
Birgire
la source
8

Vous pouvez faire l'inverse avec get_object_taxonomies. Combinez-le avec get_post_typespour parcourir les types de publication pour vérifier les taxonomies enregistrées pour chacun.

EDIT - Voici un exemple qui produit la même sortie que la fonction de @ birgire, sans utiliser de globales sales.

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
la source
3

Il n'est pas nécessaire d'utiliser $wp_taxonomiesdirectement la variable globale car WordPress a la get_taxonomy()fonction pour y accéder aux taxonomies (en noyau depuis la version 2.3.0). Depuis WordPress 4.7.0, le type de retour est un WP_Taxonomyobjet avec la propriété$object_type

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