Cómo crear nuevas taxonomías en WordPress

PHPWordPress

En WordPress existen dos tipos de taxonomías por defecto: categorías y etiquetas. Las categorías nos permiten ordenar nuestros posts y además, es posible definir categorías como hijas de otras creando una relación de herencia. A diferencia de las categorías, las taxonomías no permiten una relación de herencia pero, por el resto, funcionan igual. Basta con echar un vistazo a la base de datos de WordPress para comprobar que el funcionamiento de las taxonomías es muy simple.

Desde WordPress 2.3 es posible crear y administrar nuevas taxonomías personalizadas. El modo fácil es utilizar plugins como Simple Taxonomy, el cual podéis descargar aquí. A continuación vamos a ver cómo crear nuevas taxonomías manualmente, que es:

Crear taxonomías personalizadas manualmente

Lo que tenemos que hacer es registrar una taxonomía con el siguiente código que podremos colocar tanto en el archivo functions.php de nuestro tema como en un plugin que creemos, que es lo recomendado. En el siguiente ejemplo, estamos creando la taxonomía marca.

function marca_init() {
   // crear una nueva taxonomia
   register_marca('marca','post',
     array(
       'hierarchical' => true,
       'label' => __( 'Marca' ),
       'show_ui' => true,
       'show_admin_column' => true,
       'rewrite' => array( 'slug' => 'marca' )
     )
   );
}
add_action( 'init', 'marca_init' );

Como vemos, lo que hacemos es crear la función que registra la taxonomía y luego añadir la acción para inicializarla mediante la función add-action.

En la función de inicialización, el parámetro register_MiNuevaTaxonomia o, en este caso register_marca, acepta como primer parámetro el nombre de la taxonomía, como segundo parámetro el tipo de publicaciones a las que podrá asociarse, que en el ejemplo es post, pero también puede ser un array para incluir más de un tipo de publicación; como por ejemplo:

register_marca('marca',array('post','page')...

A continuación tenemos como tercer parámetro un array para definir varias opciones:

El parámetro hierarchical sirve para hacer posible la creación de relaciones de herencia al igual que ocurre con las categorías, de modo que en el panel de administración también se mostrarán del mismo modo a la hora de crear un nuevo post. Si preferimos que no haya relación de herencia, basta con asignar el valor false al parámetro hierarchical o sencillamente, omitirlo.

El parámetro label no es otra cosa que la etiqueta que se mostrará en el panel de administración

Los parámetros show_ui y show_admin_column sirven para mostrar el panel de edición de la taxonomía en el panel de administración de WordPress para el tipo de página o post que hayamos definido. Por defecto ya estarán con el valor true; aunque no está de más ponerlo por si existe algún plugin interfiriendo.

Finalmente, mediante el parámetro rewrite, definimos el slug para la taxonomía, que es el nombre que se mostrará en las URLs de WordPress para la taxonomía y que en este caso se mostrará como /marca/.

Además del parámetro rewrite, sería posible definir un último parámetro opcional llamado capabilities. El parámetro es un array que sirve par definir qué usuarios podrán usar la taxonomía que hemos creado y cómo la podrán utilizar. Los permisos vienen establecidos por defecto para que cualquier persona que pueda asignar términos a sus propios posts al igual que ocurre con las categorías y etiquetas, por lo que no será necesario agregar ésto en la mayor parte de las ocasiones, pero si deseáis usar esta funcionalidad, he aquí cómo:

Lo que hacemos es definir permisos mediante pares de valores, de modo que si queremos permitir que los usuarios el permiso ‘edit_guides’ puedan usar la taxonomía en el post, escribiremos: ‘assign_terms’ => ‘edit_guides’. Si queremos que un usuario con permisos ‘publish_guides’ pueda editar o crear términos de la taxonomía, escribiremos: ‘edit_terms’ => ‘publish_guides’, de modo que finalmente el código quedaría:

function marca_init() {
   // crear una nueva taxonomia
   register_marca('marca','post',
     array(
       'hierarchical' => true,
       'label' => __( 'Marca' ),
       'show_ui' => true,
       'show_admin_column' => true,
       'rewrite' => array( 'slug' => 'marca' ),
       'capabilities' => array( 'assign_terms' => 'edit_guides', 'edit_terms' => 'publish_guides' )
     )
   );
}
add_action( 'init', 'marca_init' );

Los posibles permisos que podemos definir son: assign_terms (Será posible asignar términos de la taxonomía a los posts), edit_terms (para poder editarlos), manage_terms (para poder modificar los términos mediante el panel de administración) y delete_terms (para poder eliminar términos).

Mostrando las taxonomías personalizadas

Si queremos obtener todos los valores de una taxonomía que hemos asignado a una publicación para mostrarlos en nuestros posts individuales o páginas, deberemos agregar la siguiente línea a nuestro archivo single.php, aunque también podemos mostrarlos en cualquier otro lado como en el archivo archive.php o incluso en el archivo index.php si queremos obtener la nueva taxonomía en todo caso.

<?php
the_terms( $post->ID, 'marca', 'Marca: ', ', ', ' ' );
?>

Por defecto, para mostrar el listado posts de una taxonomía se utilizará el archivo archive.php, pero si queremos crear un archivo o ‘template‘ propio, usaremos:

taxonomy-{slug-de-la-taxonomia}.php, que en el ejemplo sería taxonomy-marca.php.

Esto es todo, no dudéis en publicar un comentario si tenéis cualquier duda o por lo que sea, lo aquí explicado deja de ser válido.


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

1 comentario en “Cómo crear nuevas taxonomías en WordPress

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”