Si diseña o desarrolla temas o complementos de WordPress, es muy probable que algún día necesite realizar una consulta de 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 la WP_Query
clase query_posts()
, como get_posts()
. Dado que query_posts()
y get_posts()
son envoltorios de la 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.
have_posts() ) ( echo '
'; while ( $the_query->have_posts() ) ( $the_query->the_post(); echo '
- ' . get_the_title() . '
'; ) echo '
'; ) 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
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 el ID que le da a sus metacampos. Como esto:
Este ejemplo consultará cualquier publicación que tenga el metacampo personalizado con el ID de "campo1".
$args = array( 'meta_key' => 'field1' );
meta_valor
La meta_value
publicación de consultas de argumento tiene el valor que usted define. El meta_value
argumento se usa 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 para valores de cadena, 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
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 '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , 'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP' o 'RLIKE'. A continuación, se muestra un ejemplo que muestra cómo consultar publicaciones que no tienen el valor de "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );
Consultas más complejas
meta_query
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 para metacampos personalizados. Agregará argumentos adicionales meta_query
que se usarán para definir la consulta.
clave, valor y comparación
La argumentos key
, value
funcionan exactamente de la misma manera que meta-key
, meta-value
como se ha descrito anteriormente. El complejo compare
es similar al simple compare
anterior, pero requiere una lista diferente de comparadores. El complejo compare
usa '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN ',' NO ENTRE ',' EXISTE 'o' NO EXISTE '. 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 que especifique 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
Se relation
utiliza cuando desea consultar metadatos personalizados mediante una relación lógica. Puede usar AND
o OR
. Por ejemplo, usará AND
para comparar si data1 y data2 cumplen los criterios, y usará OR
si data1 o data2 cumplen los criterios.
Este argumento es independiente. Lo que significa que no aparece en los parámetros de un campo meta 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 cambió 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
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 compare
"BETWEEN" solo si el formato de fecha es "AAAAMMDD".
Este ejemplo consultará cualquier publicación donde el valor de "field1" 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 cualquier evento que comenzará en la fecha actual durante los próximos 30 días.
Vamos a usar 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 desde la fecha actual. Dado que estamos usando el comparador "BETWEEN", solo se consultarán las publicaciones entre la matriz de valores, por lo que queremos compensarlas en un día.
Con esta consulta, mostrará cualquier evento que ocurra en los próximos 30 días.
Conclusión
La WP_Query
clase 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 la WP_Query
página del códice.