Non vedo alcun modo per fare questo con un unico WP_Query
come meta_query
non consentire tale flessibilità, anche se è possibile fare tre domande distinte poi (codice non testato) merge :
// Get ongoing events
$ongoing = new WP_Query(array(
'post_type' => 'event',
'meta_key' => 'date_from',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'date_from',
'value' => date('Y-m-d'),
'compare' => '<=',
'type' => 'DATE'
),
array(
'key' => 'date_to',
'value' => date('Y-m-d'),
'compare' => '>=',
'type' => 'DATE'
)
)
));
foreach($ongoing as $key => $ongoing_post) {
$ongoing_post->event_status = 'ongoing';
$ongoing[$key] = $ongoing_post;
}
// Get upcoming events
$upcoming = new WP_Query(array(
'post_type' => 'event',
'meta_key' => 'date_from',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'date_from',
'value' => date('Y-m-d'),
'compare' => '>',
'type' => 'DATE'
)
)
));
foreach($upcoming as $key => $upcoming_post) {
$upcoming_post->event_status = 'upcoming';
$upcoming[$key] = $upcoming_post;
}
// Get past events
$past = new WP_Query(array(
'post_type' => 'event',
'meta_key' => 'date_from',
'orderby' => 'meta_value',
'order' => 'DESC',
'meta_query' => array(
array(
'key' => 'date_to',
'value' => date('Y-m-d'),
'compare' => '<',
'type' => 'DATE'
)
)
));
foreach($past as $key => $past_post) {
$past_post->past_status = 'past';
$past[$key] = $past_post;
}
// Merge'em all
$events = array_merge($ongoing, $upcoming, $past);
la cosa è quello di utilizzare meta_query
per confrontare i valori di meta con la data effettiva (si consiglia di cambiare il formato della data a seconda del modo in cui sono memorizzati in date_from
e date_to
campi), e fare un po 'di cappio subito dopo aggiungere una proprietà a tutti i post oggetto con il diritto event_status
su cui puoi lavorare durante la visualizzazione dei messaggi.
Forse c'è un modo intelligente per raggiungere questo attraverso WP_Query filters ma sarebbe necessaria un'indagine più approfondita all'interno del codice sorgente WP_Query
in quanto non è realmente documentato all'interno del codice.
perché non utilizzare solo query sql personalizzate - https://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query? – aeryaguzov
@aeryaguzov perché sto sovrascrivendo qualche codice plugin di WordPress e voglio solo aggiungere l'ordine per istruzione alla long wp_query che ho già. – Aghiad
Hai a che fare con una tabella personalizzata? 'WP_Query' può essere utilizzato solo per interrogare post e post personalizzati. Per tutte le tabelle personalizzate (una che è stata aggiunta da un plugin per esempio) è necessario utilizzare ['WPDB'] (https://codex.wordpress.org/Class_Reference/wpdb). – vard