Le WordPress d'aujourd'hui, décodé pour les développeurs

Astuces

register_taxonomy_for_object_type : relier une taxonomie à un type de contenu

Réutiliser une taxonomie existante sur un nouveau type de contenu ne demande pas de la redéclarer entièrement : une seule fonction suffit à créer le lien.

Par WordPress Développement • 23 juin 2023 • 4 min de lecture • Aucun commentaire
register_taxonomy_for_object_type : relier une taxonomie à un type de contenu

Une taxonomie « Auteur invité » existe déjà sur le type de contenu article. Le site accueille maintenant un nouveau type de contenu, etude-de-cas, et la même notion d’auteur invité doit s’y appliquer aussi. Faut-il redéclarer la taxonomie de zéro, avec le risque de dupliquer sa configuration à deux endroits différents du code ?

La réponse tient en une fonction dédiée à exactement ce cas : register_taxonomy_for_object_type(). Elle ne crée rien de nouveau ; elle se contente de relier une taxonomie déjà enregistrée à un type de contenu supplémentaire, sans dupliquer la moindre ligne de configuration.

Pourquoi éviter de redéclarer la taxonomie

Rien n’empêche techniquement d’appeler deux fois register_taxonomy() avec le même identifiant mais des arguments object_type différents à chaque appel. Mais cette approche disperse la configuration de la taxonomie — ses libellés, sa visibilité, ses capacités — en plusieurs endroits du code, avec le risque bien réel qu’une modification future n’en touche qu’un seul, faisant diverger silencieusement le comportement entre les deux points d’enregistrement.

Centraliser la déclaration de la taxonomie à un seul endroit, puis relier les types de contenu au fur et à mesure des besoins, garde le code plus lisible et plus facile à faire évoluer.

Utiliser register_taxonomy_for_object_type()

L'essentiel à retenir : register_taxonomy_for_object_type() relie une taxonomie déjà déclarée à un type de contenu ; Elle évite de redéclarer entièrement la taxonomie ailleurs ; Le lien doit être créé après l'enregistrement des deux éléments

La fonction accepte deux arguments : l’identifiant de la taxonomie déjà déclarée, et l’identifiant du type de contenu auquel l’attacher. Elle doit être appelée après que les deux éléments existent, généralement sur le hook init, avec une priorité suffisante pour s’exécuter après leurs déclarations respectives :

add_action( 'init', function () {
    register_taxonomy( 'auteur_invite', array( 'article' ), array(
        'label'        => 'Auteur invité',
        'public'       => true,
        'hierarchical' => false,
        'show_in_rest' => true,
    ) );
} );

add_action( 'init', function () {
    register_taxonomy_for_object_type( 'auteur_invite', 'etude_de_cas' );
}, 20 );

La priorité 20 sur le second appel garantit que la taxonomie et le type de contenu etude_de_cas sont déjà enregistrés au moment où le lien se crée. Sans cette précaution, la fonction échoue silencieusement : elle renvoie false si l’une des deux entités n’existe pas encore, sans lever d’erreur bloquante.

Vérifier que le lien a bien été créé

La fonction renvoie un booléen, qu’il est utile de vérifier au moins pendant le développement :

$resultat = register_taxonomy_for_object_type( 'auteur_invite', 'etude_de_cas' );

if ( ! $resultat ) {
    error_log( "Impossible de relier auteur_invite à etude_de_cas : vérifier l'ordre d'enregistrement." );
}

On peut aussi confirmer le lien après coup en interrogeant get_object_taxonomies( 'etude_de_cas' ), qui renvoie la liste des taxonomies désormais associées au type de contenu.

Retirer un lien devenu inutile

La fonction symétrique, unregister_taxonomy_for_object_type(), permet de retirer un lien précédemment établi sans toucher à la déclaration de la taxonomie elle-même. Ce cas se présente typiquement quand un type de contenu évolue et n’a plus besoin d’une taxonomie qui lui était auparavant rattachée :

add_action( 'init', function () {
    unregister_taxonomy_for_object_type( 'auteur_invite', 'etude_de_cas' );
}, 20 );

Une différence à ne pas confondre

  • register_taxonomy() crée la taxonomie elle-même, avec toute sa configuration (libellés, visibilité, capacités, gestion de l’API REST).
  • Le paramètre object_type passé à register_taxonomy() définit les types de contenu associés dès la création.
  • register_taxonomy_for_object_type() n’intervient qu’après coup, pour ajouter un type de contenu supplémentaire à une taxonomie déjà existante, sans modifier sa configuration d’origine.

Confondre les deux mène parfois à des déclarations redondantes de la même taxonomie, avec des libellés ou des réglages qui finissent par diverger d’un appel à l’autre au fil des modifications successives du projet.

Centraliser chaque taxonomie dans une seule fonction de déclaration, puis multiplier les appels à register_taxonomy_for_object_type() pour chaque type de contenu additionnel, rend le code beaucoup plus simple à auditer six mois plus tard.

En résumé

Cette fonction reste discrète dans la documentation, éclipsée par register_taxonomy() elle-même, mais elle règle proprement un besoin fréquent dès qu’un projet grandit et qu’une même notion de classification doit s’appliquer à plusieurs types de contenu. Le réflexe à retenir : une seule déclaration de taxonomie, autant de liens que nécessaire ensuite.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi