Wie Sie eine Taxonomie ändern, die bereits registriert ist

Heute musste ich die Argumente für eine benutzerdefinierte Taxonomie ändern, die bereits von einem Drittanbieter-Plugin registriert wurde. Insbesondere wollte ich das show_admin_column Argument auf ” true und den ” rewrite slug” ändern, so dass es nicht nur der Taxonomie-Slug war. In diesem Fall war es ein Posteingangstyp “Personen” mit einer benutzerdefinierten Taxonomie “Personenkategorie”.

Ich war überrascht, dass das vorher nicht gefragt wurde, also hier ist eine Frage und Antwort.

Solutions Collecting From Web of "Wie Sie eine Taxonomie ändern, die bereits registriert ist"

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

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

Eine Option wäre, die Argumente register_taxonomy() $args zu kopieren und sie zu modifizieren. Das würde jedoch bedeuten, dass zukünftige Änderungen des ursprünglichen register_taxonomy() -Codes überschrieben würden.

Daher sollten Sie zumindest in diesem Fall die ursprünglichen Argumente abrufen, die zu ändernden ändern und dann die Taxonomie erneut registrieren. Die Inspiration für diese Lösung geht @Otto in dieser Antwort auf eine ähnliche Frage zu benutzerdefinierten Post-Typen zu .

Mit dem benutzerdefinierten Typ ” people type” und der people_category aus dem Beispiel wird people_category :

 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 oben das dritte register_taxonomy() Argument an den erwarteten Array-Typ übergeben habe. Dies ist nicht unbedingt notwendig, da register_taxonomy() wp_parse_args() das ein object oder array . Das heißt, register_taxonomy() $args register_taxonomy() sollen gemäß dem Codex als array werden, also fühlt sich das für mich richtig an.