Comment modifier une taxonomie déjà enregistrée

18

Aujourd'hui, je devais changer les arguments d'une taxonomie personnalisée déjà enregistrée par un plugin tiers . Plus précisément, je voulais définir l' show_admin_columnargument trueet modifier le rewriteslug afin que ce ne soit pas seulement le slug de taxonomie. Dans ce cas, il s'agissait d'un type de publication "Personnes" avec une taxonomie personnalisée "Catégorie de personnes".

J'ai été surpris que cela n'ait pas été demandé auparavant, alors voici une question et une réponse.

mrwweb
la source
Juste une remarque pour toute personne coincée, n'oubliez pas de vider les permaliens avant de vérifier le résultat.
un.pez.vivo

Réponses:

22

register_taxonomy()est l'outil pour le travail. Du Codex:

Cette fonction ajoute ou écrase une taxonomie.

Une option serait de les copier register_taxonomy() $argset de les modifier. Cependant, cela signifierait que toute modification future du register_taxonomy()code d' origine serait écrasée.

Par conséquent, au moins dans ce cas, il est préférable d'obtenir les arguments d'origine, de modifier ceux que je veux changer, puis de réenregistrer la taxonomie. L'inspiration pour cette solution va à @Otto dans cette réponse à une question similaire sur les types de publication personnalisés .

En utilisant le peopletype de message personnalisé et la people_categorytaxonomie de l'exemple, cela le fera:

function wpse_modify_taxonomy() {
    // get the arguments of the already-registered taxonomy
    $people_category_args = get_taxonomy( 'people_category' ); // returns an object

    // make changes to the args
    // in this example there are three changes
    // again, note that it's an object
    $people_category_args->show_admin_column = true;
    $people_category_args->rewrite['slug'] = 'people';
    $people_category_args->rewrite['with_front'] = false;

    // re-register the taxonomy
    register_taxonomy( 'people_category', 'people', (array) $people_category_args );
}
// hook it up to 11 so that it overrides the original register_taxonomy function
add_action( 'init', 'wpse_modify_taxonomy', 11 );

Notez ci-dessus que j'ai transtypé le troisième register_taxonomy()argument en type de tableau attendu. Ce n'est pas strictement nécessaire car les register_taxonomy()utilisations wp_parse_args()qui peuvent gérer un objectou array. Cela dit, register_taxonomy()les documents $argssont censés être soumis arrayconformément au Codex, donc cela me semble juste.

mrwweb
la source
J'essaie de le faire afin de changer une taxonomie plate en une taxonomie hiérarchique. Je change simplement la propriété hiérarchique en true. En faisant cela, cela provoque deux méta-boîtes pour la taxonomie à droite de l'écran de post-édition, et je ne peux pas réellement ajouter de taxonomies ...
Joel Worsham
Assurez-vous que vous utilisez le même slug (par exemple 'people_category') que la taxonomie d'origine afin de l'écraser.
mrwweb
1
Génie! Du pur génie! Fonctionne parfaitement!
DaveyJake
1
J'ai trouvé un problème avec cette solution: le capabilitiesparamètre est stocké en interne capafin qu'il ne soit pas transmis à la nouvelle taxonomie enregistrée. Voir ma réponse à une question similaire ici
Fabien Quatravaux
1
C'est merveilleux, je l'ai utilisé pour ajouter des URL hiérarchiques à une taxonomie personnalisée.
Brian Peat