Bagaimana Anda menggunakan orderby dengan meta_query di Wordpress 3.1?

21

Apakah mungkin untuk memesan daftar posting khusus saya, setelah memfilternya dengan meta_query, berdasarkan data meta pilihan saya?

Misalnya, saya memiliki jenis posting khusus yang disebut webinar. Saya mencoba mendaftar semua webinar yang akan datang, dan meminta mereka memesannya oleh bidang meta khusus bernama webinar_startDate.

Dengan menggunakan kueri berikut, saya dapat mengembalikan webinar dengan sukses, mengecualikan webinar lama. Namun, mereka masih keluar dalam urutan mereka diterbitkan, dan bukan oleh 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'
); ?>

Saya menduga bahwa karena perubahan dari 3.0 ke 3.1, penggunaan orderby => meta_value mungkin berbeda, tetapi saya tidak dapat menemukan jawaban dalam dokumentasi WordPress untuk menjelaskan ini.

Adakah yang bisa membantu? Terima kasih sebelumnya.

Jeff K.
sumber

Jawaban:

17

meta_queryarray baru memilih postingan yang mengembalikan kueri. Jadi ya, Anda menunjukkan 'kunci' di dalamnya meta_query, tetapi Anda masih dapat menggunakan metode lama

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

selain meta_query, karena baris ini menunjukkan cara mengurutkan kueri yang dihasilkan. Jadi ya, Anda mungkin mengindikasikan meta_key yang sama dua kali.

somatik
sumber
9
Jawaban ini tidak sepenuhnya benar. Jika Anda menambahkan orderby dan meta_key di luar meta_query yang ada, hasilnya memang akan mengurutkan berdasarkan kunci yang disediakan - tetapi itu juga akan mencakup setiap pos di mana kunci meta diatur, bahkan jika nilainya tidak memenuhi kriteria di meta_query (setidaknya, begitulah cara saya bekerja dalam pengujian). Cara yang lebih baik untuk melakukan ini mungkin dengan melewatkan sebuah array sebagai param orderby, seperti yang dijelaskan di sini: core.trac.wordpress.org/ticket/17065#comment:14
MathSmath
1

Saya menggunakan kode berikut untuk posting kustom saya dipanggil events, untuk mendapatkan semua posting dalam satu Loop.

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

Saya pikir Anda menggunakan kode Anda kira-kira dengan cara yang sama. Saya pikir Anda kehilangan meta_keydengan nama meta-field untuk diurutkan. Mungkin akan membantu jika Anda menambahkan

'meta_key' => 'webinar_startDate',

ke array luar?

Guru 2.0
sumber
Saya mengerti sekarang. Saya bingung dengan dokumentasi Wordpress yang mengatakan 'meta_key' dan 'meta_value' didepresiasi. Saya berasumsi itu berarti saya tidak bisa menggunakannya, tapi saya kira itu menyesatkan. Terima kasih!
Jeff K.