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