Cum folosești orderby cu meta_query în WordPress 3.1?
Este posibil să ordonez lista mea de posturi personalizate, după filtrarea cu meta_query, folosind datele meta la alegere?
De exemplu, am un tip de postare personalizată numit webinars. Încerc să listez toate webinariile viitoare și să le ordonez după câmpul meta personalizat numit webinar_startDate.
Folosind următoarea interogare, am reușit să returnez webinariile cu succes, excluzând webinariile vechi. Cu toate acestea, ele apar încă în ordinea în care au fost publicate, și nu după 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'
); ?>
Bănuiesc că datorită schimbării de la 3.0 la 3.1, utilizarea orderby => meta_value este probabil diferită, dar nu pot găsi un răspuns în documentația WordPress care să explice acest lucru.
Poate cineva să ajute? Mulțumesc anticipat.

noul array meta_query
selectează ce postări returnează interogarea. Deci da, indicați 'key' în acel meta_query
, dar puteți folosi în continuare vechea metodă de
'orderby' => 'meta_value',
'meta_key' => '_events_meta',
în plus față de meta_query, deoarece aceste linii indică cum să sortezi rezultatul interogării. Deci da, s-ar putea să indicați același meta_key de două ori.

Acest răspuns nu este complet corect. Dacă adaugi un orderby și un meta_key în afara unui meta_query existent, rezultatul se va sorta într-adevăr după cheia furnizată - dar va include și orice articol unde acea cheie meta este setată, chiar dacă valoarea nu îndeplinește criteriile din meta_query (cel puțin așa a funcționat în testele mele). O metodă mai bună ar putea fi să transmiți un array ca parametru orderby, așa cum este descris aici: http://core.trac.wordpress.org/ticket/17065#comment:14

Folosesc următorul cod pentru postările personalizate numite events
, pentru a obține toate postările într-un Loop.
$evtLoop = new WP_Query(array('post_type' => 'events',
'posts_per_page' => 10,
'orderby' => 'meta_value',
'meta_key' => '_events_meta',
'order'=>'DESC'));
Cred că folosești codul aproximativ în același mod. Cred că îți lipsește meta_key
cu numele câmpului meta după care să sortezi. Poate te ajută dacă adaugi
'meta_key' => 'webinar_startDate',
în array-ul exterior?
