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 codex.

Comentarios

10 respuestas a «Taxonomías en WordPress 3.1. (I)»

  1. Avatar de bubuku

    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. Avatar de 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. Avatar de Rafael Poveda - RaveN

      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.

  3. Avatar de 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. Avatar de 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!!!!

  4. Avatar de Giovani

    Gracias, me sirvió para hacer una consulta de dos taxonomias