WordPress meta_query y orden por campo personalizado

3

Tengo un Tipo de publicación personalizado llamado " Películas ", con un campo Repetidor llamado " Proyecciones ", que tiene un campo " start_datetime "de tipo DateTime ...

Quiero realizar una consulta para obtener todas esas películas con una proyección en los próximos 7 días, y quiero ordenarlas a través de start_datetime.

Tengo esta consulta:

$query = new \WP_Query( array(
    'numberposts'   => -1,
    'post_type'     => 'film',
    'meta_key'      => 'showings_%_start_datetime',
    'orderby'       => 'meta_value_num',
    'order'         => 'ASC',

    'meta_query'    => array(
        array(
            'key'       => 'showings_%_start_datetime',
            'value'     => array( time(), strtotime( '+7 days' ) ),
            'type'      => 'NUMERIC',
            'compare'   => 'BETWEEN'
        )
    )
));

Esto captura todas las películas que tienen una proyección en los próximos 7 días correctamente, pero luego ordena las películas por el inicio_datiempo de la muestra FIRST , y necesito para ordenarlos por el inicio_datiempo de PRIMER FUTURO mostrando ... ¿Alguna ayuda, por favor?

Ejemplo:
La película A tiene una proyección hoy.
La película B tendrá una proyección mañana y otra muestra hace 1 año.

Mis resultados se ordenarán: Película B y luego Película A (porque en realidad, la Película B es la que está comenzando a mostrar). Pero necesito que se ordene al revés, porque la película A es la primera película que se muestra ...

    
pregunta MikO 27.03.2014 - 13:58

1 respuesta

1

Descubrí el problema al inspeccionar el SQL real creado por WP_Query . Me di cuenta de que la consulta SQL generada tiene 2 INNER JOINs, una para el meta_key y otra para el actual meta_query .

Básicamente, por un lado, filtra las películas que tienen un showings_%_start_datetime en los próximos siete días, y por otro lado (independientemente) ordena las películas por su valor de showings_%_start_datetime .

Simplemente mover los parámetros meta_query a la consulta básica funciona bien:

query = new \WP_Query( array(
    'numberposts'   => -1,
    'post_type'     => 'film',
    'meta_key'      => 'showings_%_start_datetime',
    'meta_value'    => array( time(), strtotime( '+7 days' ) ),
    'meta_type'     => 'NUMERIC',
    'meta_compare'  => 'BETWEEN',
    'orderby'       => 'meta_value_num',
    'order'         => 'ASC',
));
    
respondido por el MikO 05.04.2014 - 02:02

Lea otras preguntas en las etiquetas