web-dev-qa-db-fra.com

Comment modifier une taxonomie déjà enregistrée

Aujourd'hui, je devais changer 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 "Catégorie de personnes".

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

18
mrwweb

register_taxonomy() est l'outil idéal pour ce travail. Du Codex:

Cette fonction ajoute ou remplace une taxonomie.

Une option serait de copier le register_taxonomy()$args et de le modifier. Toutefois, 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 veux modifier, 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 type de message personnalisé people et la taxonomie people_category de l'exemple, ceci 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 argument register_taxonomy() dans le type de tableau attendu. Ce n'est pas strictement nécessaire car register_taxonomy() utilise wp_parse_args() qui peut gérer une object ou array. Cela dit, le $args de register_taxonomy() est censé être soumis sous forme de array selon le Codex, donc cela me semble juste.

20
mrwweb