Come utilizzare orderby con meta_query in WordPress 3.1?
È possibile ordinare il mio elenco di post personalizzati, dopo averlo filtrato con meta_query, in base ai metadati che preferisco?
Per esempio, ho un tipo di post personalizzato chiamato webinars. Sto cercando di elencare tutti i webinar futuri e ordinarli per il campo meta personalizzato chiamato webinar_startDate.
Usando la seguente query, sono riuscito a ottenere i webinar escludendo con successo quelli vecchi. Tuttavia, vengono ancora visualizzati nell'ordine in cui sono stati pubblicati e non in base a webinar_startDate.
<?php $my_array = array(
'meta_query' => array(
array(
'key' => 'webinar_startDate',
'value' => date("Y-m-d H:i:s"),
'compare' => '>=',
'type' => 'DATETIME'
)
),
'orderby' => 'meta_value',
'post_type' => 'webinars',
'posts_per_page' => 20,
'order' => 'ASC'
); ?>
Sospetto che a causa del cambiamento da 3.0 a 3.1, l'uso di orderby => meta_value sia probabilmente diverso, ma non riesco a trovare una risposta nella documentazione di WordPress che spieghi questo.
Qualcuno può aiutare? Grazie in anticipo.

il nuovo array meta_query
seleziona quali post restituisce la query. Quindi sì, stai indicando la 'key' all'interno di quel meta_query
, ma puoi ancora usare il vecchio metodo di
'orderby' => 'meta_value',
'meta_key' => '_events_meta',
in aggiunta al meta_query, poiché queste righe indicano come ordinare la query risultante. Quindi sì, potresti indicare lo stesso meta_key due volte.

Questa risposta non è del tutto corretta. Se aggiungi un orderby e una meta_key al di fuori di una meta_query esistente, il risultato ordinerà effettivamente in base alla chiave fornita, ma includerà anche qualsiasi post in cui quella meta chiave è impostata, anche se il valore non soddisfa i criteri nella meta_query (almeno, è così che ha funzionato per me durante i test). Un modo migliore per farlo potrebbe essere passare un array come parametro orderby, come descritto qui: http://core.trac.wordpress.org/ticket/17065#comment:14

Sto utilizzando il seguente codice per i miei post personalizzati chiamati events
, per ottenere tutti i post in un Loop.
$evtLoop = new WP_Query(array('post_type' => 'events',
'posts_per_page' => 10,
'orderby' => 'meta_value',
'meta_key' => '_events_meta',
'order'=>'DESC'));
Penso che tu stia utilizzando il tuo codice in modo approssimativamente simile. Credo che ti manchi il meta_key
con il nome del meta-field per l'ordinamento. Forse potrebbe aiutarti se aggiungi
'meta_key' => 'webinar_startDate',
all'array esterno?
