Non riesco a combinare query AND ordinamento? Soluzione per query multiple e ordinamento in WordPress
Di seguito il codice che sto usando per interrogare eventi multi-giorno. Il problema che sto riscontrando è che posso ordinare per data di inizio (evstart_date) OPPURE posso fare una query combinata su data di inizio e fine (evend_date). Ma non riesco a fare sia la query combinata CHE l'ordinamento. Il codice qui sotto ottiene la query corretta (continua a mostrare eventi multi-giorno iniziati in passato ma non ancora terminati), ma l'ordinamento è rotto (ritorna all'ordinamento predefinito per data di pubblicazione).
Ho provato diverse varianti, ma non sono riuscito a trovare una soluzione.
<?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', // Chiave meta per la data di inizio
'value' => $today,
'compare' => '>=',
'type' => 'CHAR'
),
array(
'key' => 'evend_date', // Chiave meta per la data di fine
'value' => $today,
'compare' => '>=',
'type' => 'CHAR'
)
),
'meta_key' => 'evstart_date', // Chiave per l'ordinamento
'orderby' => 'meta_value',
'order' => 'ASC'
));
?>

Ho avuto lo stesso problema finché non ho capito che in realtà non è necessario interrogare la data di inizio dell'evento, ma solo la data di fine.
Fintanto che la data di fine dell'evento non è passata, non importa se la data di inizio è nel futuro o meno. Tutto ciò che devi fare è recuperare tutte le date che non sono ancora terminate e poi puoi ordinarle per data di inizio.
Questo dovrebbe funzionare per te:
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $today = date('Y-m-d', strtotime('-6 ore')); $upcomingevents = new WP_Query(array( 'post_type' => 'events', 'posts_per_page' => 6, 'paged' => $paged, 'meta_query'=>array( array( 'key' => 'evend_date', // data di fine evento 'value' => $today, 'compare' => '>=', 'type' => 'CHAR' ) ), 'meta_key' => 'evstart_date', // data di inizio evento 'orderby' => 'meta_value', 'order' => 'ASC' )); ?>

Alla fine sono giunto alla stessa conclusione, Christian; non avevo ancora avuto modo di pubblicarla come risposta. Grazie per la tua risposta.
