web-dev-qa-db-fra.com

Obtenez le type de poste auquel une taxonomie est attachée

Étant donné une taxonomie ou un terme, est-il possible de tirer tout type de message auquel la taxonomie est attachée?

Par exemple, connaissant la taxonomie intégrée category ou étant donné un terme dans la taxonomie category, existe-t-il une fonction permettant de faire de l'ingénierie inverse que category est une taxonomie de post?

Informations inutiles

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

10
Howdy_McGee

Si nous examinons la variable globale $wp_taxonomies, nous voyons les types d'objet associés.

Il y a peut-être de meilleures façons de faire ceci ou même des fonctions principales, 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();
}

alors 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
)
11
birgire

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

EDIT- Voici un exemple qui produit le même résultat que la fonction de @ birgire, sans utiliser de variables globales modifiées.

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;
}
7
Milo

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

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