Bucle personalizado / consulta basada en campos personalizados - Trucos CSS

Anonim
Ú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 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_Queryclase query_posts(), como get_posts(). Dado que query_posts()y get_posts()son envoltorios de la WP_Queryclase. 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 $argses 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_keyargumento 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_keyes 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_valuepublicación de consultas de argumento tiene el valor que usted define. El meta_valueargumento 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_valueargumento es para valores de cadena, meta_value_numestá 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_compareargumento 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_queryque se usarán para definir la consulta.

clave, valor y comparación

La argumentos key, valuefuncionan exactamente de la misma manera que meta-key, meta-valuecomo se ha descrito anteriormente. El complejo comparees similar al simple compareanterior, pero requiere una lista diferente de comparadores. El complejo compareusa '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN ',' NO ENTRE ',' EXISTE 'o' NO EXISTE '. valuepuede 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 valueargumento.

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 relationutiliza cuando desea consultar metadatos personalizados mediante una relación lógica. Puede usar ANDo OR. Por ejemplo, usará ANDpara comparar si data1 y data2 cumplen los criterios, y usará ORsi 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ó relationa "O". Luego, consultaría cualquier publicación si "campo1" tiene el valor de "datos1", o si "campo2" tiene el valor de "datos2".

escribe

El typeargumento 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_queryargumento ya que queremos usar el typeargumento 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 valuees 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_Queryclase 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_Querypágina del códice.