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

18 sept 2014, 02:20:02
Vistas: 25.6K
Votos: 23

Hoy necesité cambiar los argumentos de una taxonomía personalizada que ya estaba registrada por un plugin de terceros. Específicamente, quería establecer el argumento show_admin_column a true y cambiar el slug de rewrite para que no fuera simplemente el slug de la taxonomía. En este caso, era un tipo de post "People" con una taxonomía personalizada "People Category".

Me sorprendió que esto no se hubiera preguntado antes, así que aquí está la pregunta y respuesta.

1
Comentarios

Nota al margen para cualquiera que se quede atascado: recuerda actualizar los enlaces permanentes antes de verificar el resultado.

un.pez.vivo un.pez.vivo
10 dic 2017 14:30:36
Todas las respuestas a la pregunta 2
9
29

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

Esta función añade o sobrescribe una taxonomía.

Una opción sería copiar los $args de register_taxonomy() y modificarlos. Sin embargo, eso significaría que cualquier cambio futuro en el código original de register_taxonomy() los sobrescribiría.

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 viene de @Otto en esta respuesta a una pregunta similar sobre tipos de contenido personalizados.

Usando el tipo de contenido personalizado people y la taxonomía people_category del ejemplo, esto funcionaría:

function wpse_modify_taxonomy() {
    // obtener los argumentos de la taxonomía ya registrada
    $people_category_args = get_taxonomy( 'people_category' ); // devuelve un objeto

    // realizar cambios en los args
    // en este ejemplo hay tres cambios
    // de nuevo, nota que es un objeto
    $people_category_args->show_admin_column = true;
    $people_category_args->rewrite['slug'] = 'people';
    $people_category_args->rewrite['with_front'] = false;

    // volver a registrar la taxonomía
    register_taxonomy( 'people_category', 'people', (array) $people_category_args );
}
// engancharlo a 11 para que sobrescriba la función register_taxonomy original
add_action( 'init', 'wpse_modify_taxonomy', 11 );

Observa arriba que convertí el tercer argumento de register_taxonomy() al tipo array esperado. Esto no es estrictamente necesario ya que register_taxonomy() usa wp_parse_args() que puede manejar un object o array. Dicho esto, los $args de register_taxonomy() deberían enviarse como un array según el Codex, por lo que esto me parece correcto.

18 sept 2014 02:20:02
Comentarios

Estoy intentando hacer esto para cambiar una taxonomía plana a una taxonomía jerárquica. Simplemente estoy cambiando la propiedad hierarchical a true. Al hacer esto, aparecen dos metaboxes para la taxonomía a la derecha de la pantalla de edición de entradas, y no puedo agregar taxonomías...

Joel Worsham Joel Worsham
8 abr 2015 19:48:32

Asegúrate de usar el mismo slug (por ejemplo, 'people_category') que la taxonomía original para que la sobrescribas.

mrwweb mrwweb
8 abr 2015 20:21:29

¡Genial! ¡Puro genio! ¡Funcionó perfectamente!

DaveyJake DaveyJake
31 may 2015 13:02:30

Encontré un problema con esta solución: el parámetro capabilities se almacena internamente como cap, por lo que no se pasará a la nueva taxonomía registrada. Consulta mi respuesta a una pregunta similar aquí

Fabien Quatravaux Fabien Quatravaux
14 dic 2015 10:37:40

Parece que agregar flush_rewrite_rules(); después de register_taxonomy es necesario para aplicar las reglas de reescritura del nuevo slug

Sajjad Ziaenezhad Shirazi Sajjad Ziaenezhad Shirazi
30 abr 2018 17:57:35

@SajjadShirazy Eso no es recomendable ya que vaciará las reglas de reescritura en cada carga de página. Es mejor ir a Ajustes > Enlaces permanentes para vaciarlas manualmente una vez.

mrwweb mrwweb
2 may 2018 19:51:41

Esto es maravilloso, lo usé para añadir URLs jerárquicas a una taxonomía personalizada.

Brian Peat Brian Peat
3 dic 2018 01:36:00

Esto es dulce como el chocolate. Gracias, que tengas un gran día.

Davey Davey
22 ene 2020 13:21:51

Usé esto para hacer que los enlaces permanentes de mi taxonomía personalizada fueran jerárquicos. Pero ahora estas URLs con una taxonomía jerárquica devuelven un error 404 Página no encontrada. También he vuelto a guardar los enlaces permanentes. ¿Alguna idea?

Laurent Laurent
30 abr 2021 14:31:27
Mostrar los 4 comentarios restantes
1
// Filtro para modificar los argumentos de registro de una taxonomía personalizada
add_filter( 'register_taxonomy_args', function( $args, $taxonomy, $object_type ) {
    // Solo aplicamos cambios para la taxonomía 'people_category' asociada al tipo de publicación 'people'
    if( $taxonomy !== 'people_category' || ! $object_type || $object_type[0] !== 'people' ) return $args;
    
    // Mostrar columna en el listado de entradas en el admin
    $args['show_admin_column'] = true;
    
    // Modificar el slug para las URLs
    $args['rewrite']['slug'] = 'people';
    
    return $args;
}, 10, 3);
12 ene 2023 10:53:53
Comentarios

Esta es la forma correcta de hacerlo hoy en día. No olvides volver a guardar los Permalinks en Ajustes.

dev_masta dev_masta
25 ago 2023 04:41:53