Bucle personalizado / consulta basada en campos personalizados | Programar Plus

Última actualización por Jason Witt.

Si diseña o desarrolla temas o complementos de WordPress, es muy probable que algún día necesite realizar una consulta para metacampos personalizados. Estos son esos pares clave / valor completamente personalizados que puede adjuntar a cualquier publicación, página o tipo de publicación personalizada. WordPress tiene una interfaz de usuario básica para ellos de forma predeterminada, o puede usar algo como Campos personalizados avanzados para personalizarlos. Pero bajo el capó, ACF usa campos personalizados de siempre.

Este mismo fragmento de página que está viendo en este momento fue escrito en 1999. En ese momento, para buscar publicaciones con campos personalizados particulares, necesitaría usar la variable global `$ wpdb`. Eso se puede usar para crear consultas MySQL que la clase WordPress WP_Query () no admite. Afortunadamente hoy en día, WordPress tiene argumentos que admiten consultas para metacampos personalizados.

Aquí, cubriremos las diferentes formas en que puede solicitar y recorrer publicaciones con campos personalizados particulares (y sus valores). Podrá utilizar esta información tanto si utiliza el WP_Query clase, query_posts(), o get_posts(). Ya que query_posts() y get_posts() son envoltorios para el WP_Query clase. Todos aceptan los mismos argumentos.

Los argumentos de la consulta

Aquí hay un ejemplo básico de una consulta de WordPress tomada del Codex de WordPress.

<?php
// The Query
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) {
  echo '<ul>';
  while ( $the_query->have_posts() ) {
    $the_query->the_post();
    echo '<li>' . get_the_title() . '</li>';
  }
  echo '</ul>';
} else {
  // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();

El $args es lo importante allí. Pasaremos diferentes argumentos para que esto funcione como queremos.

Al consultar metadatos personalizados, hay dos “grupos” de argumentos que puede utilizar. Un grupo es para una simple consulta de metacampos personalizados y el otro grupo para consultas de metacampos personalizados más complejos. Comencemos con el grupo simple.

meta_key

El meta_key El argumento consultará cualquier publicación que tenga el meta ID del campo personalizado guardado en la base de datos, haya o no un valor guardado para el campo. El meta_key es la identificación que le da a sus metacampos. Como esto:

Este ejemplo consultará cualquier publicación que tenga el metacampo personalizado con el ID de “field1”.

$args = array( 'meta_key' => 'field1' );

meta_valor

El meta_value Publicación de consultas de argumentos que tienen el valor que usted define. El meta_value El argumento se utiliza para valores de cadena. Este ejemplo consultará cualquier publicación con un metacampo personalizado que tenga el valor “data1”.

$args = array( 'meta_value' => 'data1' );

También puedes combinar los dos. Este ejemplo solo consultará publicaciones que tengan el metacampo personalizado con el ID de “field1” que tiene el valor de “data1”.

$args = array(
  'meta_key'   => 'field1', 
  'meta_value' => 'data1'
);

meta_valor_num

El argumento meta_valor_num es similar al argumento `meta_valor`. Donde el meta_value argumento es ment para valores de cadena el meta_value_num está destinado a valores numéricos.

Este ejemplo muestra cómo consultar el metacampo personalizado “campo1” si tiene un valor de “10”.

$args = array(
  'meta_key'       => 'field1', 
  'meta_value_num' => '10',
);

meta_compare

El meta_compare El argumento hace exactamente lo que parece. Te permitirá usar comparadores con los argumentos `meta_value` y` meta_value_num`. Los comparadores que puede utilizar son ‘=’, ‘! =’, ‘>’, ‘> =’, ‘$args = array(
'meta_key' => 'field1',
'meta_value' => 'data1',
'meta_compare' => '!=',
);

Consultas más complejas

meta_consulta

El argumento principal que utilizará para consultas complejas es meta_query. Este argumento por sí solo no hace nada. Simplemente le dice a WordPress que desea realizar una consulta de metacampos personalizados. Agregarás argumentos adicionales dentro meta_query que se utilizará para definir la consulta.

clave, valor y comparación

Los argumentos key, value funcionan exactamente de la misma manera que meta-key, meta-value como se describió anteriormente. El complejo compare es similar al simple compare anterior, pero se necesita una lista diferente de comparadores. El complejo compare usa ‘=’, ‘! =’, ‘>’, ‘> =’, ‘value puede ser una matriz, pero solo cuando la comparación usa’ IN ‘,’ NOT IN ‘,’ BETWEEN ‘o’ NOT BETWEEN ‘ .

Si usa ‘EXISTS’ o ‘NOT EXISTS’ con compare, no es necesario especificar un value argumento.

Aquí hay un ejemplo que consultará publicaciones si tiene “campo1” con el valor “datos1” y “campo2” con el valor que no es “datos2”.

$args = array(
  'meta_query' => array(
    array(
      'key'   => 'field1',
      'value' => 'data1'
    ),
    array(
      'key'     => 'field2',
      'value'   => 'data2',
      'compare' => '!=',
    )
  ) 

);

relación

El relation se utiliza cuando desea consultar metadatos personalizados mediante una relación lógica. Puedes usar AND o OR. Por ejemplo, usarás AND para comparar si data1 y data2 cumplen los criterios, y usa OR si data1 o data2 cumplen los criterios.

Este argumento es independiente. Lo que significa que no aparece en los parámetros de un metacampo personalizado individual. Veamos un ejemplo. Este ejemplo solo consultará publicaciones que tengan “campo1” con el valor de “datos1” y “campo2” con el valor de “datos2”.

$args = array(
  'meta_query' => array(
    'relation' => 'AND'
    array(
      'key'   => 'field1', 
      'value' => 'data1',
    ),
    array(
      'key'   => 'field2', 
      'value' => 'data2',
    ),
  )
);

Si cambiaste relation a “O”. Luego, consultaría cualquier publicación si “campo1” tiene el valor de “datos1”, o si “campo2” tiene el valor de “datos2”.

escribe

El type El argumento le permite elegir el tipo de datos a consultar. Puede utilizar ‘NUMERIC’, ‘BINARY’, ‘CHAR’, ‘DATE’, ‘DATETIME’, ‘DECIMAL’, ‘FIGNED’, ‘TIME’ o ‘UNSIGNED’.

El tipo “FECHA” se puede utilizar con el compare “BETWEEN” solo si el formato de fecha es “AAAAMMDD”.

Este ejemplo consultará cualquier publicación donde el valor de “campo1” sea numérico.

$args = array(
  'meta_query' => array(
    array(
      'key'   => 'field1', 
      'value' => 'data1',
      'type' => 'NUMERIC'
    )
  )
);

Ejemplo del mundo real

Hasta ahora, solo he dado ejemplos con datos y campos arbitrarios. Ahora, me gustaría mostrarte un ejemplo del mundo real de cómo consultar metacampos personalizados.

El escenario

Ha creado un tipo de publicación personalizada de eventos. El tipo de publicación de eventos tiene un campo personalizado de fecha con el ID de event_date. Desea crear una consulta que muestre los eventos que comenzarán en la fecha actual durante los próximos 30 días.

Vamos a utilizar el meta_query argumento ya que queremos usar el type argumento para definir el campo “event_date” como tipo de datos “DATE”.

Esta es la consulta:

$args = array(
  'post_type'      => 'post',
  'posts_per_page' => -1,
  'post_status'    => 'publish',
  'meta_query'     => array(
    array(
      'key'     => 'event_date',
      'value'   => array( date( 'Ymd', strtotime( '-1 day' ) ), date( 'Ymd', strtotime( '+31 days' ) ) ),
      'compare' => 'BETWEEN',
      'type'    => 'DATE'
    ) 
  )
);
$event_query = new WP_Query( $args );

El value es una matriz de la fecha actual: 1 día y 31 días a partir de la fecha actual. Como estamos usando el comparador “BETWEEN”, solo se consultarán las publicaciones entre la matriz de valores, por lo que queremos compensarlas por un día.

Con esta consulta, mostrará cualquier evento que ocurra en los próximos 30 días.

Conclusión

El WP_Query class es una clase muy flexible que le permitirá crear una multitud de consultas personalizadas. Si desea obtener más información sobre los diferentes argumentos que puede utilizar para las consultas, le recomiendo que consulte el WP_Query página del códice.