Taxonomías en WordPress 3.1. (I)

Publicado por el día 24 Feb, 2011 | 8 comentarios


WordPress 3.1. acaba de salir a la calle y trae bajo el brazo una buena lista de mejoras y nuevas funcionalidades. En este artículo vamos a centrarnos en las concernientes a las taxonomías.

Podemos crear nuestras propias taxonomías desde WordPress 2.3., sin embargo, hasta la versión 2.9. no se empezó realmente a explotar el potencial de dicha herramienta.

Una taxonomía, en WordPress, es una forma personalizada de agrupar tus entradas (o también para agrupar enlaces o tipos de entradas). Para entendernos, WordPress ya trae dos taxonomías, por defecto, para las entradas: las categorías y las etiquetas. De manera que, creando taxonomías nuevas, podemos crear en nuestro sistema un nuevo tipo de relaciones entre nuestras entradas.

Pongamos un ejemplo sencillo para entender mejor sus aplicaciones:

Ejemplo de tienda online en WP

Tenemos una tienda online en WP y envíamos, diariamente, pedidos a todos los rincones del mundo (incluida la Antártida :P). Para facilitarnos la tarea, hemos definido un tipo de entrada que se llama Pedido y queremos crear las dos taxonomías: País y Estado (del pedido), donde englobaremos los artículos por países de destino y por el estado en el que se encuentran desde que han sido adquiridos por el cliente. Para ello, añadimos al function.php el siguiente código:

//CUSTOM TAXONOMIES
add_action( 'init', 'build_taxonomies', 0 );
 
function build_taxonomies() {  
 
 	register_taxonomy('pais','post',array('hierarchical' => true,'label' => 'País','query_var' => true,'rewrite' => true));
 	register_taxonomy('estado','post',array('hierarchical' => true,'label' => 'Estado','query_var' => true,'rewrite' => true));
}

Una vez hecho, aparecerá en el menú Entradas del panel de administración, dos nuevos submenús, llamados: País y Estado:

Hacemos click sobre una de ellas, País, por ejemplo, y como podeis comprobar, nos encontramos con la página normal de añadir categorías, sólo que esta vez, no son categorías, sino países, los que vamos a crear. Añadimos tantos como queramos y lo mismo hacemos con la taxonomía Estado. Es importante que tengamos claro dos conceptos:

Taxonomía: País
Términos (de la taxonomía): España, Francia, Inglaterra, Japón, Rusia,…

Una vez añadidos todos los términos que necesitamos a cada taxonomía, nos vamos a la página de edición de nuestras entradas de tipo Pedido. A mano derecha, han aparecido dos nuevas cajas, una por cada nueva taxonomía que hemos creado. Allí, ya podemos seleccionar el país y el estado en el que se encuentra nuestro pedido.


Y ahora, que ya sabemos usarlas. Veamos qué podemos hacer con ellas:

Consultas por taxonomías

Una de las nuevas funcionalidades de WP 3.1. es precisamente ésta. Ahora los desarrolladores podemos, crear consultas avanzadas a la base de datos con múltiples taxonomías, utilizando la función query_posts, tal y como hacíamos con las etiquetas y las categorías.

En nuestro ejemplo, podemos tener una página, con un filtro que se actualizara por AJAX (siempre queda más resultón :P), donde pudiéramos mostrar una lista de los pedidos vendidos a Australia y que ya se han recibido, o todos los artículos que ya están pagados y listos para enviar, etc.

Como podeis comprobar, estas nuevas querys son muy versátiles y podemos sacarles mucho jugo, asociando nuestros diferentes tipos de entradas y agrupándolas con diferentes taxonomías.

Consultas simples por taxonomía. La siguiente consulta nos devolverá todos los pedidos hechos a Francia:

$args = array(
	'tax_query' => array(
		array(
			'taxonomy' => 'pais',
			'field' => 'slug',
			'terms' => 'francia'
		)
	)
);
query_posts( $args );

Consultas múltiples por taxonomía. La siguiente consulta, nos devolverá todos los pedidos hechos a Australia y Nueva Zelanda, y que además (‘relation’ => ‘AND’), que no sean ni reservas, ni estén listos para enviar (‘operator’ => ‘NOT IN’), es decir, que hayan sido entregados o enviados.

$args = array(
	'tax_query' => array(
		'relation' => 'AND',
		array(
			'taxonomy' => 'pais',
			'field' => 'slug',
			'terms' => array( 'australia', 'nueva-zelanda' ),
		),
		array(
			'taxonomy' => 'estado',
			'field' => 'slug',
			'terms' => array( 'reservado', 'para-enviar' ),
			'operator' => 'NOT IN',
		)
	)
)
query_posts( $args );

Para más información sobre las consultas avanzadas por taxonomías, podeis consultar la función query_posts del codex.