¿Quieres valorar este artículo? Gracias

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (1 votos, promedio: 5,00 de 5)
Cargando…

Última modificación: 8 julio 2017

Consultas complejas con campos personalizados – meta_query WordPress

En el artículo anterior, Ordenar post utilizando campos personalizados en WordPress, realizamos consultas simples sobre un metadato. Uno de los ejemplos del post, mostraba como ordenar de forma sencilla nuestras entradas por un campo personalizado  llamado precio.  En este artículo aprenderemos a utilizar la clase meta_query para implementar consultas complejas sobre varios campos personalizados o custom fields.

Consultas complejasEste artículo amplía la información descrita en las entradas anteriores de este blog:

Campos personalizados en WordPress – Custom Fields

Ordenar post utilizando campos personalizados en WordPress

 

La clase meta_query

WordPress permite desde la versión 3.2.0 realizar consultas sobre múltiples metadatos de nuestros post. Estas consultas complejas hacen uso de la clase meta_query que encontrarás en la siguiente ruta de tu WP:

wp-includes/class-wp-meta-query.php.

Cómo utilizar meta_query

Como podemos observar dentro de nuestra consulta wp_query hemos añadido un nuevo argumento: meta_query.

meta_query le indica a WordPress que vamos a realizar una consulta para campos personalizados.

Estructura meta_query

Cuando trabajamos con varios campos, la estructura se compone de un array principal donde incluimos tantos arrays como campos personalizados necesitemos utilizar y una relación entre campos.

La relación (‘relation’) es opcional por defecto implementada como AND. Indica la relación lógica que existe entre los  distintos campos personalizados (varios arrays).

Qué argumentos aceptan los arrays de meta_query

Cada array dentro de meta_query acepta los siguientes argumentos:

  • key (string) – es la clave de nuestro custom field o campo personalizado, por ejemplo fabricante o precio.
  • value (string|array) – admite dos tipos de valores, un string, el valor de nuestro campo personalizado, por ejemplo Disney. También admite un array, por ejemplo array(50,100). 
  • compare (string) – Operador lógico que admite los siguientes valores: ‘=’, ‘!=’, ‘>’, ‘>=’, ‘<‘, ‘<=’, ‘LIKE’, ‘NOT LIKE’, ‘IN’, ‘NOT IN’, ‘BETWEEN’, ‘NOT BETWEEN’, ‘EXISTS’ (para WP >= 3.5),  ‘NOT EXISTS’ (para WP >= 3.5). ‘REGEXP’, ‘NOT REGEXP’ y ‘RLIKE’ ( para WordPress 3.7). Su valor por defecto es:  ‘=’.
  • type (string) – El tipo del campo personalizado. Admite los siguientes valores: ‘NUMERIC’, ‘BINARY’, ‘CHAR’, ‘DATE’, ‘DATETIME’, ‘DECIMAL’, ‘SIGNED’, ‘TIME’, ‘UNSIGNED’. Su valor por defecto es: ‘CHAR’.

Vamos a exponer ejemplos de código real para poder entender mejor su funcionamiento.

Ejemplos meta_query

Ejemplo dos campos con relación AND

1- El código muestra entradas personalizadas tipo ‘juguete’, cuyo fabricante sea Disney y su precio esté entre 50€ y 100€. Cuidado con el uso de BETWEEN sólo acepta los valores del array incluidos entre 50 y 100, es decir precio >50 o <100.

Ejemplo dos campos con relación AND y manejando fechas

2- El siguiente código mostrará en pantalla las entradas personalizadas tipo ‘evento’, cuya ‘fecha’ esté comprendida entre el día de hoy y los próximos 30 días y se celebren en la ‘ciudad’ de ‘Valencia’.

De nuevo cuidado con el uso de BETWEEN, vemos que los extremos del array son un día menos que la fecha actual y un día más que la fecha pasados 30 días.

Ejemplo tres campos y doble relación lógica

3- Ejemplo doble relación lógica entre campos personalizados. Muestra los post tipo ‘juguete’ si el fabricante es ‘Marvel’ y la edad recomendada del juguete mayor o igual a 4 años o el precio sea > 50€ y < 100€.

Todos los juguetes de Marvel para niños de 4 años o más y todos los juguetes de Marvel cuyo precio es mayor a 50 y menor a 100€.

Más información

Si necesitas más información sobre construir meta_query y sus argumentos te recomiendo ir a la página de codex de WordPress.

 

Nerea Liebana

Lph by Nerea Liébana

¿Quieres suscribirte al Newsletter?

Web Hosting

Últimos artículos