Jak korzystasz z orderby z meta_query w Wordpress 3.1?


21

Czy jest możliwe zamówienie mojej listy niestandardowych postów, po przefiltrowaniu jej za pomocą meta_query, według wybranych metadanych?

Na przykład mam niestandardowy typ postu o nazwie seminaria internetowe. Próbuję wyświetlić listę wszystkich nadchodzących seminariów internetowych i uporządkować je według niestandardowego pola meta o nazwie webinar_startDate.

Korzystając z następującego zapytania, udało mi się z powodzeniem zwrócić webinaria, z wyłączeniem starych webinarów. Nadal jednak pojawiają się w kolejności, w jakiej zostały opublikowane, a nie według 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'
); ?>

Podejrzewam, że z powodu zmiany z 3.0 na 3.1 użycie orderby => meta_value jest prawdopodobnie inne, ale nie mogę znaleźć odpowiedzi w dokumentacji WordPress, aby to wyjaśnić.

Czy ktoś może pomóc? Z góry dziękuję.

Odpowiedzi:


17

nowa meta_querytablica wybiera, które posty zwracają zapytanie. Więc tak, wskazujesz „klucz” w tym zakresie meta_query, ale nadal możesz użyć starej metody

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

oprócz meta_query, ponieważ wiersze te wskazują, jak posortować wynikowe zapytanie. Więc tak, możesz dwukrotnie wskazać ten sam meta_key.


9
Ta odpowiedź nie jest całkowicie poprawna. Jeśli dodasz orderby i meta_key poza istniejącym meta_query, wynik rzeczywiście zostanie posortowany według dostarczonego klucza - ale obejmie również każdy post, w którym ustawiony jest ten meta-klucz, nawet jeśli wartość nie spełnia kryteriów w meta_query (przynajmniej tak to działało dla mnie podczas testowania). Lepszym sposobem na to może być przekazanie tablicy jako param według kolejności, jak opisano tutaj: core.trac.wordpress.org/ticket/17065#comment:14
MathSmath

1

Używam następującego kodu dla moich wywoływanych niestandardowych postów events, aby uzyskać wszystkie posty w pętli.

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

Myślę, że używasz swojego kodu w przybliżeniu w ten sam sposób. Myślę, że brakuje Ci meta_keynazwy meta-pola do sortowania. Może to pomoże, jeśli dodasz

'meta_key' => 'webinar_startDate',

do zewnętrznej tablicy?


Teraz widzę. Byłem zdezorientowany dokumentacją Wordpress, w której napisano, że „meta_key” i „meta_value” zostały odrzucone. Zakładałem, że to oznacza, że ​​nie mogę ich użyć, ale myślę, że to było mylące. Dzięki!
Jeff K.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.