it-swarm.com.de

So ändern Sie eine bereits registrierte Taxonomie

Heute musste ich die Argumente für eine benutzerdefinierte Taxonomie ändern, die bereits von einem Plugin eines Drittanbieters registriert wurde. Insbesondere wollte ich das Argument show_admin_column auf true setzen und den Slug rewrite so ändern, dass es nicht nur der Taxonomie-Slug ist. In diesem Fall handelte es sich um einen Beitragstyp "Personen" mit einer benutzerdefinierten Taxonomie "Personenkategorie".

Ich war überrascht, dass dies vorher nicht gestellt wurde. Hier ist eine Frage und Antwort.

18
mrwweb

register_taxonomy() ist das Werkzeug für den Job. Aus dem Kodex:

Diese Funktion fügt eine Taxonomie hinzu oder überschreibt sie.

Eine Möglichkeit wäre, den register_taxonomy()$args zu kopieren und zu ändern. Dies würde jedoch bedeuten, dass zukünftige Änderungen des ursprünglichen register_taxonomy()-Codes überschrieben werden.

Daher ist es zumindest in diesem Fall vorzuziehen, die ursprünglichen Argumente abzurufen, die zu ändernden zu ändern und dann die Taxonomie neu zu registrieren. Die Inspiration für diese Lösung geht an @Otto in dieser Antwort auf eine ähnliche Frage zu benutzerdefinierten Beitragstypen .

Verwenden Sie den benutzerdefinierten Beitragstyp people und die Taxonomie people_category aus dem Beispiel.

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 );

Beachten Sie, dass ich das dritte Argument register_taxonomy() in den erwarteten Array-Typ typisiert habe. Dies ist nicht unbedingt erforderlich, da register_taxonomy()wp_parse_args() verwendet, das eine object oder array verarbeiten kann. Das heißt, register_taxonomy()s $args sollen laut Codex als array eingereicht werden, daher fühlt sich das für mich richtig an.

20
mrwweb