Taxonomías en WordPress 3.1. (I)

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 codexThe latest version of WordPress 3.1 has been released to the masses, and it contains a few extra goodies. This time, we are going to focus this post around taxonomies.

“Since WordPress 2.3, you’ve been able to create your own custom taxonomies, but these have been a rarely used feature of WordPress until version 2.9. In truth, they are an extremely powerful way to group various items in all sorts of ways”.

“In WordPress, a ‘taxonomy’ is a grouping mechanism for some posts (or links or custom post types)”. WordPress has two built in taxonomies that you’ve probably used already for posts: categories and tags. This way, using this new feature in our system, we can show posts associated with certain taxonomy.

Let’s see a simple example for a better understanding:

Example of a online store on WP

We have a online store running on WP and we are sending orders around the world diary (including to the Antarctic :P ). To make it easy, we have defined a custom post type called Order and we want to create two taxonomies: Country and Status (of the order), so we will group orders by countries of destiny and their status since it was bought for the client. For that, we only have to add the following code to our functions.php:

//CUSTOM TAXONOMIES
add_action( 'init', 'build_taxonomies', 0 );
 
function build_taxonomies() {  
 
 	register_taxonomy('country','post',array('hierarchical' => true,'label' => 'Country','query_var' => true,'rewrite' => true));
 	register_taxonomy('estado','post',array('hierarchical' => true,'label' => 'Status','query_var' => true,'rewrite' => true));
}

Once you’ve added a taxonomy, you’ll find that WordPress creates two new submenus on Posts menu for you. Their names: Country and Status:

We click on one of them, Country, for example. This new page looks almost exactly like the Categories page and will let you add countries to the taxonomy. We add so many as we want and do the same with the Status taxonomy. It is important to be clear on that:

Taxonomy: Country

Terms (of the taxonomy): Spain, France, England, Japan, Russia,…

Once you’ve added all terms you need to your news taxonomies, we’re going to the Edit Order‘s custom posts type screen. On the right, you’ll find that WordPress creates two new meta boxes on posts for you. Those new meta boxes looks almost exactly like the Category box and will let you select the country of destiny and status of your order.

Now we know how to use taxonomies. Let’s go to see what can we do with them:

Taxonomy Queries

This is one of the new features of WP 3.1. Advance queries allows developers to query multiple taxonomies, using the query_posts function, same way as we use to do it with tags and categories.

For our example, it could be very useful to have a page which you can use to retrieve posts based on a filter of taxonomies, of course, auto refreshing using AJAX (it will make it more attractive :P ). On that page, we could checked the list of received orders to Australia, or the full list of paid and ready to ship orders, etc.

Custom taxonomies are a powerful organizational tool, and using it with custom post types, both are a great way to create tight relationship in WordPress.

Simple Taxonomy Query: The follow query will display all orders to France:

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

Multiple Taxonomy Handling. The follow query will display all orders that are to Australia and New Zeland and (‘relation’ => ‘AND’) are not reservations and ready to send either (‘operator’ => ‘NOT IN’), in other words, which ones that have been sent or received.

$args = array(
	'tax_query' => array(
		'relation' => 'AND',
		array(
			'taxonomy' => 'country',
			'field' => 'slug',
			'terms' => array( 'australia', 'new-zeland' ),
		),
		array(
			'taxonomy' => 'status',
			'field' => 'slug',
			'terms' => array( 'reservation', 'ready-to-send' ),
			'operator' => 'NOT IN',
		)
	)
)
query_posts( $args );

For more information about advanced queries for taxonomies, you can consult the query_posts function in the codex.

10 thoughts on “Taxonomías en WordPress 3.1. (I)

  1. Gracías por el artículo, no tenia muy claro para que servian las taxonomías en wp y nunca había profundizado en este asunto.

    Pero tiene buena pinta, gracias por abrir otra puerta a la imaginación.

  2. Pingback: Mecus consultores – Taxonomías en WordPress 3.1. (I) : Blogoogler.com

  3. Pingback: wp-popular.com » Blog Archive » Mecus consultores – Taxonomías en WordPress 3.1. (I)

  4. alvis

    Hola chica linda :) me preguntaba como poner paises como categorias en wp ejemplo: site.com/chile/antofagasta/casas/vendo-mi-casa-barato/

    site.com/peru/lima/mascotas/cuy-para-comer-o-criar/

    site.com/uruguay/montevideo/contacto/soy-la-novia-de-forland/

    ect ect.es para una web de clasificados en wp

    1. Hola Alvis.

      Las rutas específicas que planteas corresponden a categorías.

      Si creas un árbol de categorías jerárquicas como sigue:

      uruguay
      -> montevideo
      –> contacto

      y al escribir tu artículo marcas “contacto” como categoría para tu artículo, éste tendrá la ruta site.com/uruguay/montevideo/contacto/articulo/

      Un saludo.

  5. Sophien

    Hola, muchas gracias por el aporte, pero creo que hay algo que hago mal.

    Necesito mostrar en una página los posts que pertenezcan a 2 categorías concretas, así que pongo

    justo antes del while de una plantilla de página, pero el editor da error en
    ‘tax_query’=>array(

    no tendría que poner este código en una plantilla de página? no lo ubico bien dentro del archivo?

    Me podrías decir como hacer lo que quiero hacer? se puede?

    gracias

    1. Sophien

      Si, me he fijado y está bien, son las simples.

      Este código lo pego en una plantilla de página, antes del Loop, entre

      por lo que queda: (Ojo, el nombre de la taxonomy es category porque no he creado mas, uso las categorias normales)

      <?php
      $args = array(
      'tax_query' => array(
      'relation' => 'AND',
      array(
      'taxonomy' => 'category',
      'field' => 'slug',
      'terms' => array( 'Zapatos', 'Azules' ),
      ),

      )
      )
      query_posts( $args );

      y el error que me pone es:

      PHP: Parse error: parse error, expecting `')"on line 34

      ¿Se ha de copiar en un template de pagina?
      ¿Se ha de añadir los ?
      ¿hay que hacer algo antes?

      A parte, en el enlace que me has pasado, he encontrado esta función

      $query = new WP_Query( array( ‘category__and’ => array( 2, 6 ) ) );

      que me hace lo que quiero, pero solo me muestra el título, ya que dice que hay que meterlo en:

      have_posts() ) : $the_query->the_post();
      echo ”;
      the_title();
      echo ”;
      endwhile;

      // Reset Post Data
      wp_reset_postdata();
      ?>

      He conseguido ponerle el boton Read More, pero no consigo que muestre las primeras líneas del contenido de cada post..:S

      Si entro desde el menú de categorias se ve como quiero: Título, primeras lineas del post y boton read more, pero no encuentro el template de las categorias.

      ¿Sábes cómo puedo saber donde está el template de “mostrar posts de una categoria”?

      Muchas gracias!!!!

Deja un comentario

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

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>