Come utilizzare orderby con meta_query in WordPress 3.1?

2 mar 2011, 20:59:39
Visualizzazioni: 23.2K
Voti: 22

È 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.

0
Tutte le risposte alla domanda 2
1
17

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.

2 mar 2011 21:38:55
Commenti

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

MathSmath MathSmath
3 apr 2012 19:59:33
1

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?

2 mar 2011 21:34:30
Commenti

Ora ho capito. Ero confuso dalla documentazione di Wordpress che diceva che 'meta_key' e 'meta_value' erano deprecate. Pensavo che significasse che non potevo più usarle, ma immagino che fosse fuorviante. Grazie!

Jeff K. Jeff K.
2 mar 2011 23:55:47