Pesan dengan DESC, ASC di WP_Query khusus


8

Saya perlu melakukan pemesanan multi-level dalam permintaan. Masalahnya adalah dengan memesan satu nilai DESC dan ASC lainnya seperti dalam SQL. SQL berikut ini sepertinya memberikan apa yang saya inginkan ketika saya menjalankannya di terminal:

SELECT DISTINCT * FROM wp_posts 
INNER JOIN wp_postmeta 
ON wp_posts.ID = wp_postmeta.post_id 
WHERE wp_posts.post_type = 'post' 
AND wp_postmeta.meta_key = 'pb_issue_featured'
AND wp_posts.post_status = 'publish' 
ORDER BY wp_postmeta.meta_value DESC, wp_posts.menu_order ASC;

Ini pb_issue_featuredadalah nilai boolean. Hasil akhir yang saya butuhkan adalah kueri untuk menampilkan posting yang memiliki nilai meta 1 untuk bidang ini di bagian atas, lalu semua yang lain di bawah. Kemudian pemesanan tingkat kedua adalah yang ditunjuk menu_order(saya menggunakan plugin urutan jenis posting).

Masalahnya adalah bahwa nilai boolean saya perlu dipesan tinggi ke rendah (1 ke 0) tetapi menu_order sebaliknya. Apa yang dipesan terlebih dahulu dengan plugin ini memiliki urutan menu 1. Jadi menggunakan 'orderby' bawaan di WP_Query tidak berfungsi. Adakah yang punya saran? Saya melihat ke filter 'posts_orderby' tetapi tidak bisa mengambilnya. Tidak benar-benar yakin di mana itu harus diterapkan atau bagaimana saya bisa memecahkannya. Itu hanya tidak memesan kembali cara saya memilikinya.

Terima kasih untuk bantuannya! Saya akan memposting WP_Query yang sebenarnya jika relevan tetapi saya ingin membuat ini sesingkat mungkin.

Argumen kueri:

$args = array(
        'post_type' => 'post',
        'meta_key' => 'pb_issue_featured',
        'orderby'   => 'meta_value',
        'order' => 'DESC',
        'post_status' => 'publish',
        'posts_per_page' => $posts,
        'paged' => $paged,
        'meta_query' => array(
            array(
                'key' => 'headline',
                'value' => 1,
                'compare' => '!=' 
                )
            )
        );
$q = new WP_Query($args);

Nah, Anda harus memposting WP_Query, untuk melihat apakah itu benar.
Marin Bînzari

Itu semua dalam kemuliaan itu. Saya saat ini tidak memesan apa pun kecuali bahwa nilai meta boolean b / c itu adalah satu-satunya cara untuk mendapatkan tingkat itu atau menyortir bekerja. Situs ini juga menggunakan posting 'informasi utama' yang diutamakan daripada posting 'fitur'. Jadi saya mengecualikan mereka dalam query ini
ian

Jawaban:


20

Coba ini:

$args = array(
        'post_type' => 'post',
        'meta_key' => 'pb_issue_featured',
        'orderby'   => 'meta_value',
        'order' => 'DESC',
        'posts_per_page' => $posts,
        'paged' => $paged,
        'paged' => 1,
        'meta_query' => array(
            array(
                'key' => 'headline',
                'value' => 1,
                'compare' => '!=' 
                )
            )
        );

add_filter( 'posts_orderby', 'filter_query' );
$q = new WP_Query($args);
remove_filter( 'posts_orderby', 'filter_query' );

function filter_query( $query ) {
    $query .= ', wp_posts.menu_order ASC';
    return $query;
}

Seperti bos Spartakus. Terima kasih atas jawaban singkat dan akurat. Ini bekerja seperti pesona
ian

1
Anda juga bisa menggunakan array dalam urutan dengan klausa (WP 4.0 dan yang lebih baru)
Blueriver
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.