¿No puedes realizar una consulta combinada y ordenar los resultados? Solución para eventos de varios días
A continuación está el código que estoy usando para consultar eventos de varios días. El problema que tengo es que puedo ordenar por la fecha de inicio (evstart_date) O puedo hacer una consulta combinada contra la fecha de inicio y la fecha de fin (evend_date). Pero no puedo hacer ambas cosas: la consulta combinada Y el ordenamiento. El código de abajo obtiene la consulta correcta (sigue mostrando eventos de varios días que comenzaron en el pasado pero aún no han terminado), pero el ordenamiento está roto (vuelve al orden predeterminado por fecha de publicación).
He intentado varias variaciones, pero no he podido encontrar una solución.
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$today = date('Y-m-d', strtotime('-6 hours'));
$upcomingevents = new WP_Query(array(
'post_type' => 'events',
'posts_per_page' => 6,
'paged' => $paged,
'meta_query'=>array(
'relation'=>'OR',
array(
'key' => 'evstart_date',
'value' => $today,
'compare' => '>=',
'type' => 'CHAR'
),
array(
'key' => 'evend_date',
'value' => $today,
'compare' => '>=',
'type' => 'CHAR'
)
),
'meta_key' => 'evstart_date',
'orderby' => 'meta_value',
'order' => 'ASC'
));
?>
Tuve este mismo problema hasta que me di cuenta de que en realidad no es necesario consultar por la fecha de inicio del evento, solo por la fecha de finalización.
Mientras la fecha de finalización del evento no haya pasado, no importa si la fecha de inicio está en el futuro o no. Todo lo que tienes que hacer es obtener todas las fechas que aún no han terminado y luego puedes ordenarlas por su fecha de inicio.
Esto debería funcionar para ti:
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $today = date('Y-m-d', strtotime('-6 hours')); $upcomingevents = new WP_Query(array( 'post_type' => 'events', 'posts_per_page' => 6, 'paged' => $paged, 'meta_query'=>array( array( 'key' => 'evend_date', // Fecha de finalización 'value' => $today, 'compare' => '>=', // Mayor o igual a hoy 'type' => 'CHAR' ) ), 'meta_key' => 'evstart_date', // Ordenar por fecha de inicio 'orderby' => 'meta_value', 'order' => 'ASC' // Orden ascendente )); ?>

Finalmente llegué a la misma conclusión, Christian; no había tenido tiempo de publicarla como respuesta. Gracias por tu respuesta.
