Comment modifier une taxonomie déjà enregistrée

16

Aujourd'hui, je devais modifier les arguments d'une taxonomie personnalisée déjà enregistrée par un plug-in tiers . . Plus précisément, je voulais définir l'argument show_admin_column sur true et modifier le slug rewrite afin qu'il ne s'agisse pas uniquement du slug taxonomie. Dans ce cas, il s’agissait d’un type de message "Personnes" avec une taxonomie personnalisée "Personnes".

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

    
posée mrwweb 18.09.2014 - 01:20

1 réponse

17

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

  

Cette fonction ajoute ou remplace une taxonomie.

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

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

En utilisant le type de message personnalisé people et la taxonomie people_category de l'exemple, cela se 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 converti le troisième argument register_taxonomy() dans le type de tableau attendu. Ce n'est pas strictement nécessaire car register_taxonomy() utilise wp_parse_args() pour gérer un object ou array . Cela dit, les register_taxonomy() des $args sont supposés être soumis en tant que array selon le Codex, donc cela me convient.

    
réponse donnée mrwweb 18.09.2014 - 01:20

Lire d'autres questions sur les étiquettes