Come si usa orderby con meta_query in Wordpress 3.1?


21

È possibile ordinare il mio elenco di post personalizzati, dopo averlo filtrato con meta_query, in base ai metadati di mia scelta?

Ad esempio, ho un tipo di post personalizzato chiamato webinar. Sto cercando di elencare tutti i webinar imminenti e di ordinarli dal meta campo personalizzato chiamato webinar_startDate.

Utilizzando la seguente query, sono stato in grado di restituire correttamente i webinar escludendo i vecchi webinar. Tuttavia, escono ancora nell'ordine in cui sono stati pubblicati e non tramite 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 della modifica 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 per spiegarlo.

Qualcuno può aiutare? Grazie in anticipo.

Risposte:


17

il nuovo meta_queryarray seleziona quali post restituisce la query. Quindi sì, stai indicando la 'chiave' all'interno di quello meta_query, ma puoi ancora usare il vecchio metodo di

'orderby' => 'meta_value', 
'meta_key' => '_events_meta',

oltre a meta_query, poiché queste righe indicano come ordinare la query risultante. Quindi sì, potresti indicare lo stesso meta_key due volte.


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

1

Sto usando il seguente codice per i miei post personalizzati chiamati events, per ottenere tutti i post in un ciclo.

$evtLoop = new WP_Query(array('post_type' => 'events',
                              'posts_per_page' => 10,
                              'orderby' => 'meta_value', 
                              'meta_key' => '_events_meta',
                              'order'=>'DESC'));

Penso che stai usando il tuo codice approssimativamente allo stesso modo. Penso che ti manchi il meta_keynome del meta-campo da ordinare. Forse aiuta se aggiungi

'meta_key' => 'webinar_startDate',

alla matrice esterna?


Ora vedo. Ero confuso dalla documentazione di Wordpress che diceva che "meta_key" e "meta_value" erano deprezzati. Supponevo che ciò significasse che non potevo usarli, ma immagino che fosse fuorviante. Grazie!
Jeff K.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.