Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress

Argumentos para WP_Query: Campos Personalizados

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Mastering WP_Query.
WP_Query Arguments: Taxonomies
WP_Query Arguments: Date

Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)

Si has estado siguiendo esta serie, ya sabrás cómo se estructura WP_Query y cómo usarlo para escribir consultas personalizadas. Para poder definir qué va a recuperar WP_Query de la base de datos, necesitas conocer qué argumentos puedes usar para solicitar datos.

WP_Query cuenta con gran cantidad de posibles argumentos, lo que lo hace extremadamente flexible. Dado que lo puedes usar para consultar sobre cualquier cosa presente en tu tabla wp_posts, dispone de argumentos para cualquier combinación de consulta relacionada con tu contenido que desees ejecutar.

En este tutorial vamos a ver los argumentos para los campos personalizados o, como los llamaremos a partir de ahora, 'custom fields'. Pero primero, un breve recordatorio sobre cómo codificar los argumentos en WP_Query.

Recordando Cómo Funcionan los Argumentos en WP_Query

Antes de empezar, recordemos cómo funcionan los argumentos en WP_Query. Cuando codificas WP_Query en tus temas o plugins, debes incluir cuatro elementos principales:

  • Los argumentos de la consulta, usando los parámetros que vamos a ver en este tutorial.
  • La consulta en sí.
  • El loop.
  • Y para terminar: las etiquetas de cierre if y while y el restablecimiento de los datos del post.

En la práctica, esto tendrá el siguiente aspecto:

Los argumentos le indican a WordPress qué datos recuperar desde la base de datos, eso es precisamente lo que veremos aquí. Por tanto, nos vamos a centrar en la primera parte del código:

Como puedes ver, los argumentos están contenidos en una matriz o array. Aprenderás a crearlas a lo largo de este tutorial.

Crear el Código para Tus Argumentos

Hay una forma concreta de codificar los argumentos de un array, es la siguiente:

Debes encerrar los parámetros y sus valores entre paréntesis, usar => entre cada parámetro y su valor, y separar cada uno de estos pares mediante una coma. Si lo haces mal, posiblemente WordPress no agregará todos tus argumentos a la consulta u obtendrás una pantalla blanca como resultado.

Parámetros para los Campos Personalizados

Los campos personalizados, conocidos también como metadatos de la entrada, pueden usar una clase independiente llamada WP_Meta_Query. Esto significa que si quieres ejecutar únicamente una consulta sobre datos de una entrada, puedes usar tanto WP_Meta_Query como WP_Query (el cual accede a WP_Meta_Query), mientras que si quieres consultar metadatos de una entrada y de otros elementos como un post type, usarías WP_Query.

Veremos con más detalle la clase WP_Meta_Query en otro capítulo de esta serie, así que no entraré en detalles ahora, simplemente quiero señalar que la diferencia entre usar esto y WP_Query consiste en que WP_Query te permite crear algunos argumentos sencillos sin necesidad de usar arrays anidados.

Parámetros para Consultas de Campos Personalizados Sencillos

Los principales parámetros de WP_Query para consultar campos personalizados son los siguientes:

  • meta_key (string): La clave del campo.
  • meta_value (string): Valor del campo personalizado.
  • meta_value_num (number): El valor del campo personalizado.
  • meta_compare (string): Operador para comprobar el 'meta_value'. Los valores posibles son '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP' o 'RLIKE'. El valor predeterminado es '='.

Usa estos parámetros para realizar una consulta sencilla sobre un campo personalizado. Por ejemplo, para dar salida a los posts que tengan un campo personalizado con la clave key1 (con independencia de su valor), usarías el siguiente argumento:

Esto devolverá todos los posts que contengan un campo personalizado con la clave key1, sea cual sea su valor.

Si quieres especificar el valor, añadirías un argumento más, mira este ejemplo:

Esto devolverá todas las entradas que contengan un campo personalizado con la clave key1 cuyo valor sea igual a value1.

De igual manera, podrías recuperar todos los posts con un campo personalizado con un valor value1, sea cual sea su clave (key). Esto podría ser útil en el caso de que tengas múltiples claves de campos personalizados con valores duplicados:

De manera que, como ves, puedes consultar simplemente por la clave del campo personalizado o por su valor - no siempre tienes que especificar ambos.

Usar el Argumento meta_compare

Habrás notado que existen un montón de posibles parámetros para el argumento meta_compare, y su uso no siempre es evidente. Echemos un vistazo a aquellos que posiblemente vayas a usar con más frecuencia:

  • =: Es igual. Este es el predeterminado, así que si no incluyes un argumento para meta_compare, WP_Query usará este.
  • !+: No es igual a.
  • >: Mayor que.
  • >=: Mayor o igual a.
  • <: Menor que.
  • <=: Menor o igual a.
  • LIKE: Esto ignorará el valor que uses, y puedes además usar caracteres comodín para encontrar valores similares al que usas en tu consulta.
  • NOT LIKE: Funciona de forma similar a LIKE pero consulta justo lo opuesto.
  • IN: Usa esto junto a un array en el 'value' del argumento para encontrar posts con uno o varios de los valores presentes en la cadena.
  • BETWEEN: Úsalo con un array de dos valores numéricos (especificados en el argumento meta_value) para encontrar posts con un campo personalizado entre esos valores (pero no igual a ellos).
  • NOT BETWEEN: Consulta los posts con valores de campo personalizado fuera de un array de dos valores numéricos especificados por el argumento meta_value.

Echemos un vistazo a algunos ejemplos de uso de este argumento.

En primer lugar, puedes excluir claves o valores de campos personalizados usando el argumento meta_compare. Por tanto, para recuperar todos los posts excepto aquellos con un campo personalizado que contengan la clave key1, usarías esto:

También podrías usar el valor 'NOT IN' para el argumento meta_compare, que también puede usarse con una cadena de múltiples valores.

Esto consultará los posts que no tengan campos personalizados con los valores key1 o key2. Si quieres ser más específico, podrías consultar los posts con un determinado campo personalizado pero no otro, usarías un array anidado, lo veremos en breve.

Los anteriores ejemplos usan valores no numéricos. Puedes usar WP_Query con campos personalizados que tengan valores numéricos, no sólo para recuperar posts con un campo personalizado que contenga dicho valor, sino también para consultar aquellos con campos personalizados de valores superiores o inferiores. Podrías usar esto , por ejemplo, en una tienda online, como medio para localizar artículos con un precio por encima o por debajo de un determinado valor.

Para encontrar posts con un valor superior a una determinada cifra en el campo personalizado, usa algo como esto:

Esto te devolverá todos los posts con un campo personalizado con la clave numkey y un valor superior a 100. Si quieres consultar los posts con valores iguales o superiores a 100, usarías 'meta_compare' => '>='.

También puedes encontrar aquellos posts cuyos campos personalizados tengan valores entre dos cifras que especifiques usando el argumento BETWEEN y un array.

Esto localizará todas las entradas con un valor situado entre 100 y 200 en el campo personalizado numkey.

Consultas Anidadas de Campos Personalizado

Si quieres consultar más de un campo personalizado o usar más de un operador en la consulta, puedes usar un array anidado.

Estos tienen la siguiente estructura:

La forma en la que estructuras el argumento 'meta_query' en WP_Query es exactamente la misma que usarías usando la clase WP_Meta_Query, la cual veremos en un próximo tutorial de esta serie, así que no lo haré ahora aquí.

Desde la versión 4.1 de WordPress puedes incluso usar varios niveles de anidamiento en el array para crear consultas aún más complejas y precisas. Tendrían un aspecto similar a esto:

Esto te permite usar distintas relaciones en distintos niveles de tu consulta, por ejemplo localizar posts con un valor en una clave de un campo personalizado, o con ambos valores en otro campo personalizado. Veremos esto con más detalle, y con ejemplos, en el tutorial sobre la clase WP_Meta_Query, que también forma parte de esta serie.

Resumen

Usando la clase WP_Query para consultar los metadatos (o campos personalizados) de los posts te proporciona gran flexibilidad, con múltiples argumentos potenciales combinados con distintos operadores para ayudarte a realizar consultas en tu base de datos como desees exactamente.

Si sólo quieres usar argumentos de metadatos de los posts en tu consulta (sin combinarlos con otros argumentos, por ejemplo posts types), podrías usar también la clase WP_Meta_Query, que veremos más adelante en esta serie.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.