Una taxonomía en wordpress sirve para clasificar contenido.
WordPress incluye dos taxonomías para clasificar las entradas: categorías y etiquetas.
“Las categorías permitían una agrupación amplia de temas de las entradas, pero cuando querías describir una entrada en términos más específicos necesitabas utilizar más categorías. Esto daba como resultado grandes listas de categorías dentro del blog y grandes listas en los Widgets de categorías.
Ahora tenemos etiquetas también.
Las etiquetas son similares a las categorías pero generalmente son utilizadas para describir tus publicaciones con más detalle.” – Categorías vs. Etiquetas – en.support.wordpress.com.
Las páginas se pueden clasificar con relación jerárquica – padre e hijo – por ejemplo una página llamada “programación” pueden servir como base para agrupar páginas más detalladas como “Ruby”, “PHP”, “JavaScript”.
Dependiendo del comportamiento que queramos para el contenido es probable que necesitemos crear otras taxonomías – en particular si utilizamos tipos de entrada personalizados -.
Registrar una taxonomía
Al igual que con las entradas personalizadas es posible registrar la taxonomía en el tema utilizando el archivo functions.php o hacer un plugin.
Para mantener la flexibilidad de cambiar el tema sin perder la funcionalidad prefiero hacer un plugin.
Para registrar una taxonomía utilizamos la función register_taxonomy.
<?php
register_taxonomy($taxonomia, $objetos, $parametros);
?>
Parámetros de register_taxonomy
El primer parámetro es el nombre de la taxonomía.
Si utilizas varias taxonomías o si crees que es probable que el nombre de tu taxonomía sea el mismo que el nombre de un plugin puedes utilizar un prefijo para prevenir este inconveniente.
<?php
register_taxonomy('lenguaje', $objetos, $parametros);
?>
En el segundo parámetro se definen el tipo – o los tipos – de entrada donde se va a utilizar la taxonomía.
Los valores pueden ser post para las entradas, page para las páginas, attachment para los archivos adjuntos, revision para las revisiones, nav_menu_item para los menús de navegación o el nombre de una entrada personalizada – en minúsculas sin espacios en blanco – si estás utilizando entradas personalizadas.
<?php
register_taxonomy('lenguaje', array('post', 'page'), $parametros);
?>
El tercer parámetro de register_taxonomy es donde se indica la manera en la cuál va a funcionar la taxonomía.
Los valores permitidos son:
Valor |
Descripción |
labels |
Arreglo con etiquetas – cadenas de texto – donde se define cómo se va a visualizar la taxonomía en la sección de administración. |
public |
Determina si la taxonomía se puede consultar de manera publica o únicamente en el área de administración. |
show_ui |
Indica si la taxonomía es visible en la interfaz de administración |
show_tagcloud |
Indica si la taxonomía se puede seleccionar en el widget de la etiqueta de nubes. |
meta_box_cb |
Nombre para una función callback para la visualización en la caja meta – metabox -. |
show_in_nav_menus |
Indica si permite que los términos de la taxonomía se utilicen en los menús de navegación. |
hierarchical |
Define si la taxonomía es jerárquica (como las categorías)- true – o no (como las etiquetas) – false -. |
update_count_callback |
Permite asociar una función callback que se manda llamar cada vez que modifica el número de términos. |
query_var |
De manera predeterminada va a utilizar el nombre de la taxonomía, pero se puede establecer como falso para prevenir consultas (utilizando WP_Query). |
rewrite |
Permite ajustar la estructura de los enlaces permanentes – permalinks – en las plantillas que utilizan los términos de la taxonomía. |
capabilities |
Permite definir el rol del usuario que tiene acceso a utilizarlo. |
sort |
Define si la taxonomía debe recordar el orden en el cuál los elementos – de la taxonomía – fueron asociados a los objetos – entradas -. |
Para poder utilizar la taxonomía definida, tenemos que enganchar – crear un gancho / hook – register_taxonomy cuando el evento init suceda.
El siguiente ejemplo funciona para clasificar páginas y / o entradas con distintos lenguajes.
La taxonomía lenguajes se va a comportar como etiquetas – no va a utilizar jerarquías – y, si se habilita en los enlaces permanentes, la taxonomía se va a visualizar como lenguaje en el URL.
<?php
/*
Definimos la función que se va a encadenar al evento init.
*/
function registrar_taxonomia() {
/*
Utilizamos un arreglo para almacenar las etiquetas
que se van a visualizar en la interfaz.
*/
$etiquetas = array(
'name' => __( 'Lenguajes' ),
'singular_name' => __( 'Lenguaje' ),
'add_new' => __( 'Nuevo lenguaje' ),
'all_items' => __('Todos los lenguajes'),
'add_new_item' => __( 'Agregar lenguaje' ),
'edit_item' => __( 'Editar lenguaje' ),
'new_item' => __( 'Nuevo lenguaje' ),
'view_item' => __( 'Ver lenguajes' ),
'search_items' => __( 'Buscar lenguajes' ),
'update_item' => __('Actualizar lenguaje'),
'separate_items_with_commas' => __('Separa los lenguajes con comas'),
'popular_items' => __('Lenguajes más utilizados'),
'choose_from_most_used' => __('Elige entre los lenguajes más utilizados'),
'add_or_remove_items' => __( 'Agregar o quitar lenguajes'),
'not_found' => __('No se encontraron lenguajes'),
'not_found_in_trash' => __('No se encontraron lenguajes en la basura'),
'menu_name' => __("Lenguajes")
);
/*
Definimos las propiedades de comportamiento.
Para asignar las etiquetas utilizamos el nombre del arreglo.
De esta manera queda un poco más legible el código.
*/
$opciones = array(
'public' => true,
'labels' => $etiquetas,
'hierarchical' => false,
'rewrite' => array( 'slug' => 'lenguaje', 'with_front' => true )
);
/*
Registramos el nombre de la taxonomía, lo asociamos
a los tipos de entrada donde queramos utilizar la taxonomía
y establecemos las opciones.
*/
register_taxonomy('lenguaje', array( 'page', 'post' ), $opciones);
}
/*
Creamos el hook para mandar registrar la taxonomía.
*/
add_action('init', 'registrar_taxonomia', 0);
?>
Plantilla
Si queremos una plantilla para visualizar las publicaciones que están clasificadas con esta taxonomía necesitamos crear el archivo: taxonomy-{nombre-taxonomia}.php
En este caso utilicé taxonomy-lenguaje.php para visualizar las entradas que están clasificadas con la taxonomía.
Si vas a utilizar la plantilla, ve a la sección de ajustes > enlaces permanentes – permalinks – y vuelve a guardar la configuración que tienes – para que se actualicen las reglas de rescritura / rewrite rules -.
<?php get_header(); ?>
<div class='row'>
<h2>Lenguajes</h2>
<!-- Loop -->
<div class='post-group default row'>
<div class='nine columns post-group-content'>
<?php
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<!-- Visualización del resumen de la entrada -->
<article <?php post_class( 'leftaside' ); ?>>
<header class="post-header">
<h1 class="post-title entry-title">
<a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
</h1>
</header>
<div class="row">
<section class="post-content">
<p class="hatom-meta meta date updated"> <time datetime="<?php echo the_time('Y-m-d'); ?>" ><?php the_time('m/d/Y'); ?></time>
<?php the_post_thumbnail( 'medium-thumbnail' ); ?>
<?php the_excerpt('Leer Más...'); ?>
</section>
</div>
<div class='lenguajes'>
<?php echo get_the_term_list( $post->ID, 'lenguaje', '', ', ', '' ); ?>
</div>
</article>
<!-- Visualización del resumen de la entrada -->
<?php endwhile; ?>
<?php endif; ?>
</div>
</div>
<!-- Loop -->
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
get_the_term_list se va a encargar de visualizar las taxonomías – en este caso cada lenguaje – con las que está asociada cada entrada.
Uso
Una vez que se tiene definido el archivo de la taxonomía se incluye en la página de plugins de wordpress.
Una vez hecho esto la taxonomía debe de estar disponible en los tipos de publicación para los cuáles se habilitó.
Dependiendo de cómo se habilitó el comportamiento (como categorías o etiquetas) se va a visualizar en el menú de creación / edición de los tipos de entrada asociados.
Puedes descargar la taxonomía y la plantilla, además de archivos que pueden funcionar como base para que hagas tus taxonomías de github o bitbucket.