¿Cómo hacer una wp_query usando "BETWEEN" con dos meta_values?

30 oct 2013, 20:21:36
Vistas: 21.1K
Votos: 6

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'
        )
    )
);
0
Todas las respuestas a la pregunta 3
4

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

30 oct 2013 21:27:19
Comentarios

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

kaiser kaiser
31 oct 2013 02:32:55

@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 M Ahmad M
31 oct 2013 12:54:40

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

Hor Hor
31 oct 2013 18:35:33

Si hago lo que dices, mira lo que imprime la consulta: "BETWEEN '_event_start_date' AND '_event_end_date')"

Hor Hor
31 oct 2013 18:39:02
3

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

30 oct 2013 20:31:54
Comentarios

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!

Hor Hor
30 oct 2013 21:06:01

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

Toni Michel Caubet Toni Michel Caubet
30 oct 2013 21:18:08

Sí, no hay resultados. De eso es de lo que hablo, en teoría esto debería funcionar... ¡pero no lo hace! ¡jeje!

Hor Hor
31 oct 2013 18:36:42
1
-1

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

27 sept 2017 14:38:36
Comentarios

La pregunta se refiere al uso de fechas en los metadatos, no al campo de fecha en la tabla de publicaciones.

Milo Milo
27 sept 2017 18:23:41