WP_Query vs query_posts vs get_posts เทียบกับ pre_get_posts

รายละเอียดอย่างรวดเร็ว

  • query_posts - ไม่ใช้ยกเว้นในกรณีขอบที่หายาก
  • pre_get_posts - ใช้หากคุณต้องการแก้ไขการสืบค้นข้อมูลเริ่มต้นบนหน้าเว็บ
  • WP_Query ใหม่ - ใช้เพื่อรับผลลัพธ์ที่ต่างจากข้อความค้นหาหลัก
  • get_posts - เหมือนกับ WP_Query เพียงแค่แสดงผลลัพธ์ในรูปแบบอาร์เรย์แทน
  • query_posts

    ไม่แนะนำให้ใช้ query_posts อีกต่อไป มีวิธีที่ดีกว่าในการบรรลุสิ่งที่คุณพยายามจะบรรลุผล กำลังพยายามเปลี่ยนแบบสอบถามหลักหรือไม่? ใช้การกระทำ pre_get_posts เพื่อกรองผลลัพธ์ (ดูด้านล่าง) query_posts จะส่ง การสืบค้นหลักเดิมไปที่ด้านข้าง (หลังจากที่ดำเนินการแล้ว) และสร้างข้อความค้นหาหลักใหม่ จะแทนที่ตัวแปรทั้งหมดที่เกี่ยวข้องกับโพสต์และส่งผลให้เกิดการเรียกใช้ฐานข้อมูลใหม่อย่างสมบูรณ์ ไม่มีเหตุผลที่คุณไม่ควรปรับเปลี่ยนข้อความค้นหาที่มีอยู่ ฉันแน่ใจว่ามีบางกรณีขอบที่มันควรจะใช้ แต่ฉันไม่สามารถคิดออกจากด้านบนของหัวของฉัน ใช้ตัวเลือกอย่างใดอย่างหนึ่งด้านล่างเนื่องจากอาจมีความเหมาะสมมากกว่า

    pre_get_posts

    นี่เป็นตัวกรอง ซึ่งจะปรับเปลี่ยนการค้นหาหลักไปยังหน้า ตัวอย่างเช่นเราต้องการเปลี่ยนจำนวนผลการค้นหาที่ส่งคืนในหน้าแรก ...

     ฟังก์ชั่น tj_change_home_number ($ query) {if (is_home ()) {$ query-> set ('posts_per_page', 2); กลับ; }} add_action ('pre_get_posts', 'tj_change_home_number'); 

    การดำเนินการนี้จะเปลี่ยนข้อความค้นหาหลักเพื่อส่งคืนเฉพาะ 2 โพสต์ในหน้าแรกเท่านั้น

    WP_Query

    แบบสอบถามหลักในเทมเพลตใด ๆ ที่เรียกว่าเป็นอินสแตนซ์ของ WP_Query เมื่อคุณโต้ตอบกับตัวแปรโพสต์ทั่วโลกภายในเทมเพลตซึ่งเป็นผลลัพธ์ของ WP_Query กรณีการใช้งานนี้เป็นจำนวนมาก แต่เช่นเดียวกับ get_posts ฉันจะประกาศ WP_Query แบบ ใหม่เพื่อวัตถุประสงค์ในการดึงบทความที่เกี่ยวข้องบางอย่างมาพร้อมกัน โปรดทราบว่าถ้าคุณเรียกใช้ ฟังก์ชัน the_post () ขณะวนซ้ำผ่าน WP_Query ใหม่ ให้เรียกใช้ฟังก์ชัน wp_reset_postdata () หลังจากที่คุณวนวนเสร็จแล้วเพื่อตั้งค่าข้อมูลโพสต์ทั่วโลกลงในข้อความค้นหาหลักเดิม

    get_posts

    การใช้ get_posts ทำให้คุณมีผลเรียก WP_Query ใหม่และรับข้อมูลดังกล่าวกลับมาในรูปแบบอาร์เรย์ ฉันมักจะใช้ get_posts เมื่อฉันส่งคืนโพสต์สำหรับแถบเลื่อนในหน้าแรกหรือเรียกดูโพสต์ที่เกี่ยวข้องในแถบด้านข้าง WP_Query สามารถใช้งานได้ง่าย แต่เป็นวิธีที่ดีในการรับข้อความจำนวนมากโดยไม่มีการปรับเปลี่ยนตัวแปรโพสต์ทั่วโลก ในมุมมองของฉันที่ง่ายที่สุดและง่ายที่สุดในการใช้ ไม่จำเป็นต้องมีการเรียกฟังก์ชันหลังจากที่ข้อมูลของคุณถูกส่งกลับเพียงแค่วนซ้ำผ่านอาร์เรย์

    อาจทำให้เกิดความสับสนเล็กน้อยดังนั้นอย่าลังเลที่จะตั้งคำถามในความคิดเห็นด้านล่าง

    อ้างอิง:
    WP_Query
    pre_get_posts
    query_posts
    get_posts

ดูเพิ่มเติมที่