คุณใช้ orderby กับ meta_query ใน Wordpress 3.1 ได้อย่างไร


21

เป็นไปได้หรือไม่ที่จะสั่งรายการโพสต์ที่กำหนดเองหลังจากกรองด้วย meta_query โดยใช้ข้อมูลเมตาที่ฉันเลือก

ตัวอย่างเช่นฉันมีประเภทโพสต์ที่กำหนดเองที่เรียกว่าการสัมมนาผ่านเว็บ ฉันกำลังพยายามแสดงรายการการสัมมนาผ่านเว็บที่กำลังจะมาถึงทั้งหมดและให้พวกเขาสั่งซื้อโดยเขตข้อมูลเมตาแบบกำหนดเองที่เรียกว่า webinar_startDate

ด้วยการใช้แบบสอบถามต่อไปนี้ฉันสามารถส่งคืนการสัมมนาผ่านเว็บได้สำเร็จยกเว้นการสัมมนาผ่านเว็บเก่า อย่างไรก็ตามพวกเขายังคงออกมาตามลำดับที่เผยแพร่โดยไม่ใช่ 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'
); ?>

ฉันสงสัยว่าเนื่องจากการเปลี่ยนแปลงจาก 3.0 เป็น 3.1 การใช้ orderby => meta_value อาจแตกต่างกัน แต่ฉันไม่พบคำตอบในเอกสาร WordPress เพื่ออธิบายสิ่งนี้

ใครช่วยได้บ้าง ขอบคุณล่วงหน้า.

คำตอบ:


17

meta_queryอาร์เรย์ใหม่เลือกโพสต์ที่ส่งคืนเคียวรี ใช่แล้วคุณกำลังระบุ 'กุญแจ' อยู่ภายในนั้นmeta_queryแต่คุณยังสามารถใช้วิธีการเดิมได้

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

นอกเหนือจาก meta_query เนื่องจากบรรทัดเหล่านี้ระบุวิธีเรียงลำดับคิวรีผลลัพธ์ ใช่คุณอาจระบุ meta_key เดียวกันสองครั้ง


9
คำตอบนี้ไม่ถูกต้องสมบูรณ์ หากคุณเพิ่ม orderby และ meta_key นอก meta_query ที่มีอยู่ผลลัพธ์จะจัดเรียงตามคีย์ที่ให้ไว้ - แต่จะรวมโพสต์ใด ๆ ที่ตั้งค่าคีย์ meta ไว้แม้ว่าค่านั้นจะไม่ตรงตามเกณฑ์ก็ตาม ใน meta_query (อย่างน้อยนั่นเป็นวิธีที่ฉันใช้ในการทดสอบ) วิธีที่ดีกว่าในการทำเช่นนี้อาจเป็นการส่งอาเรย์เป็น orderby param ดังที่อธิบายไว้ที่นี่: core.trac.wordpress.org/ticket/17065#comment:14
MathSmath

1

ฉันใช้รหัสต่อไปนี้สำหรับโพสต์ที่กำหนดเองของฉันที่เรียกว่าeventsเพื่อรับโพสต์ทั้งหมดในลูป

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

ฉันคิดว่าคุณกำลังใช้รหัสของคุณโดยประมาณในลักษณะเดียวกัน ฉันคิดว่าคุณขาดmeta_keyชื่อของ meta-field ที่จะเรียงลำดับ อาจช่วยได้ถ้าคุณเพิ่ม

'meta_key' => 'webinar_startDate',

แถวนอก?


ฉันเห็นแล้ว ฉันสับสนโดยเอกสาร Wordpress ที่กล่าวว่า 'meta_key' และ 'meta_value' ถูกคิดค่าเสื่อมราคา ฉันคิดว่านั่นหมายความว่าฉันไม่สามารถใช้มันได้ แต่ฉันเดาว่านั่นทำให้เข้าใจผิด ขอบคุณ!
Jeff K.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.