Cómo modificar una taxonomía que ya está registrada

18

Hoy necesitaba cambiar los argumentos de una taxonomía personalizada que ya estaba registrada por un complemento de terceros . Específicamente, quería establecer el show_admin_columnargumento truey cambiar la rewritebabosa para que no fuera solo la babosa de taxonomía. En este caso, era un tipo de publicación "Personas" con una taxonomía personalizada "Categoría de personas".

Me sorprendió que esto no se haya preguntado antes, así que aquí hay una pregunta y respuesta.

mrwweb
fuente
Solo una nota al margen para cualquiera que se quede atascado, recuerde eliminar los enlaces permanentes antes de verificar el resultado.
un.pez.vivo

Respuestas:

22

register_taxonomy()Es la herramienta para el trabajo. Del Codex:

Esta función agrega o sobrescribe una taxonomía.

Una opción sería copiarlos register_taxonomy() $argsy modificarlos. Sin embargo, eso significaría que cualquier cambio futuro al register_taxonomy()código original se sobrescribirá.

Por lo tanto, al menos en este caso, es preferible obtener los argumentos originales, modificar los que quiero cambiar y luego volver a registrar la taxonomía. La inspiración para esta solución se dirige a @Otto en esta respuesta a una pregunta similar sobre los tipos de publicaciones personalizadas .

Usando el peopletipo de publicación personalizada y la people_categorytaxonomía del ejemplo, esto lo hará:

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

Tenga en cuenta que escribí el tercer register_taxonomy()argumento para el tipo de matriz esperado. Esto no es estrictamente necesario como register_taxonomy()usos wp_parse_args()que pueden manejar un objecto array. Dicho esto, register_taxonomy()'s $argsse supone que deben ser presentados como un arrayacuerdo con el Codex, por lo que este se siente bien para mí.

mrwweb
fuente
Estoy tratando de hacer esto para cambiar una taxonomía plana a una taxonomía jerárquica. Simplemente estoy cambiando la propiedad jerárquica a verdadero. Al hacer esto, provoca dos meta cuadros para la taxonomía a la derecha de la pantalla de edición de publicaciones, y no puedo agregar taxonomías ...
Joel Worsham
Asegúrese de utilizar la misma babosa (p 'people_category'. Ej. ) Que la taxonomía original para sobrescribirla.
mrwweb
1
¡Genio! ¡Genio puro! Funcionó perfectamente!
DaveyJake
1
Encontré un problema con esta solución: el capabilitiesparámetro se almacena internamente, cappor lo que no se pasará a la nueva taxonomía registrada. Vea mi respuesta a una pregunta similar aquí
Fabien Quatravaux
1
Esto es maravilloso, lo usé para agregar URL jerárquicas a una taxonomía personalizada.
Brian Peat