¿Cómo hacer una wp_query usando "BETWEEN" con dos meta_values?
Estoy empezando con WordPress, ya he logrado hacer algunas consultas, pero esta... ¡uf! ¡Me está dando dolores de cabeza!
Lo que quiero hacer es esta parte de la consulta:
" ... WHERE "VALOR_QUE_QUIERO" BETWEEN event_start_date AND event_end_date ..."
Donde "event_start_date" y "event_end_date" son claves meta (¡quiero usar sus valores, no los míos!)
Esto es lo que tengo hasta ahora...
$tEA = array(
'post_type' => 'event',
'meta_key' => $metaKey,
'orderby' => 'meta_value',
'order' => $order,
'posts_per_page' => $postPerPage,
'meta_query' => array(
array(
'key' => $metaKey,
'value' => $today,
'compare' => "=",
'type' => 'DATE'
),
array(
'key' => '_event_end_time'
)
)
);

Esto debería funcionar para ti:
$tEA = array(
'post_type' => 'event',
// no necesitas meta_key ya que usas meta_query
//'meta_key' => $metaKey,
'orderby' => 'meta_value',
'order' => $order,
'posts_per_page' => $postPerPage,
'meta_query' => array(
array(
'key' => $metaKey,
// el valor debe ser un array de (inferior, superior) con BETWEEN
'value' => array('FECHA_INICIO', 'FECHA_FIN'),
'compare' => 'BETWEEN',
'type' => 'DATE'
),
)
);
Ten en cuenta que FECHA_INICIO y FECHA_FIN deben estar en formato de fecha MySQL AAAA-MM-DD

+1 pero estoy bastante seguro de que los timestamps UNIX están perfectamente bien.

@kaiser Gracias, pero como el tipo de datos se convierte a DATE
, no estoy seguro si WP lo formateará correctamente al construir el meta_query, por lo que es más seguro usar directamente el formato de fecha de MySQL en este caso.

Ahmad, gracias por la respuesta, pero en mi problema 'START_DATE' y 'END_DATE' deberían ser el meta_value de estos campos. Tengo un evento que tiene "_event_start_date" y "_event_end_date", y son meta_keys.
Lo que quiero es hacer un "BETWEEN" con estos dos meta_values. No quiero insertar manualmente los valores, porque estos valores son meta_values.
Jeje..

No lo he probado, pero ¿qué tal esto?
$tEA = array(
'post_type' => 'event',
'meta_key' => $metaKey,
'orderby' => 'meta_value',
'order' => $order,
'posts_per_page' => $postPerPage,
'meta_query' => array(
array(
'key' => 'event_start_date',
'value' => 'VALOR_QUE_QUIERO',
'compare' => '>='
),
array(
'key' => 'event_end_date',
'value' => 'VALOR_QUE_QUIERO',
'compare' => '<='
),
array(
'key' => '_event_end_time'
)
)
);
No estoy seguro si necesitabas la otra comparación, si es así, simplemente añádela :P

en teoría debería funcionar... pero no lo hace =( Estoy tratando de arreglarlo. Si alguien sabe cómo hacerlo, por favor, ¡siéntete libre de publicarlo!

¿has probado solo con el array event_start_date? ¿Por qué no funciona? (¿no hay resultados?)

Desde WP 3.7 puedes pasar 'date_query' como argumento.
Ejemplo que devuelve posts desde el 1 de enero hasta el 28 de febrero:
$args = array(
'date_query' => array(
array(
'after' => 'January 1st, 2013',
'before' => array(
'year' => 2013,
'month' => 2,
'day' => 28,
),
'inclusive' => true,
),
),
'posts_per_page' => -1,
);
$query = new WP_Query( $args );
Código tomado de https://codex.wordpress.org/Class_Reference/WP_Query
