Cum folosești orderby cu meta_query în WordPress 3.1?

2 mar. 2011, 20:59:39
Vizualizări: 23.2K
Voturi: 22

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.

0
Toate răspunsurile la întrebare 2
1
17

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.

2 mar. 2011 21:38:55
Comentarii

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

MathSmath MathSmath
3 apr. 2012 19:59:33
1

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?

2 mar. 2011 21:34:30
Comentarii

Acum înțeleg. Am fost confuz de documentația WordPress care spunea că 'meta_key' și 'meta_value' sunt depreciate. Am presupus că asta înseamnă că nu le pot folosi, dar se pare că informația a fost înșelătoare. Mulțumesc!

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