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
). 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
), 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
). 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
). 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.





