ฉันคิดว่าตอนนี้ฉันเข้าใจสิ่งที่คุณกำลังพยายามทำ เมื่อคุณเรียกใช้แบบสอบถามที่กำหนดเองด้วยWP_Query
และกำหนดวงเงินที่จะได้รับเพียง 5 ข้อความต่อหน้าเพียง 5 โพสต์จะถูกดึงจากแบบสอบถามและแบบสอบถามที่จะถือ 5 โพสต์แต่เพื่อประโยชน์ของเลขที่WP_Query
ยังคงไหลผ่านฐานข้อมูลทั้งหมด และนับการโพสต์ทั้งหมดที่ตรงกับเกณฑ์ของการค้นหา
ที่สามารถมองเห็นได้เมื่อคุณดู$found_posts
และ$max_num_pages
คุณสมบัติของแบบสอบถาม ลองยกตัวอย่าง:
คุณมี 20 post
โพสต์ที่อยู่ในโพสต์เริ่มต้นชนิด คุณเพียง แต่ต้องโพสต์ล่าสุด 5 โดยไม่ต้องแบ่งหน้า ข้อความค้นหาของคุณมีลักษณะเช่นนี้
$q = new WP_Query( 'posts_per_page=5' );
var_dump( $q->posts )
จะให้ 5 โพสต์ล่าสุดตามที่คาดไว้
echo $q->found_posts
จะให้คุณ 20
echo $q->max_num_pages
จะให้คุณ 4
ผลกระทบของงานพิเศษนี้มีเพียงเล็กน้อยในไซต์ที่มีบทความเพียงไม่กี่โพสต์ แต่อาจมีราคาแพงหากคุณใช้งานเว็บไซต์ที่มีหลายร้อยหรือหลายพันโพสต์ นี่เป็นการสิ้นเปลืองทรัพยากรหากคุณต้องการเพียง 5 โพสต์ล่าสุด
มีพารามิเตอร์ที่ไม่มีเอกสารที่เรียกว่าno_found_rows
ซึ่งใช้ค่าบูลีนซึ่งคุณสามารถใช้เพื่อทำให้แบบสอบถามของคุณประกันตัวหลังจากพบ 5 โพสต์ที่คุณต้องการ การทำเช่นนี้จะเป็นการบังคับWP_Query
ไม่ให้ค้นหาโพสต์ใด ๆ เพิ่มเติมเกี่ยวกับการคำนวณเกณฑ์หลังจากที่ได้รับจำนวนโพสต์ที่สอบถาม พารามิเตอร์นี้แล้วสร้างเป็นget_posts
นั่นคือเหตุผลที่get_posts
เป็นบิตเร็วกว่าWP_Query
ถึงแม้ว่าget_posts
การใช้งานWP_Query
ข้อสรุป
โดยสรุปหากคุณจะไม่ใช้การแบ่งหน้าในแบบสอบถามมันก็ควรที่จะเสมอ'no_found_rows=true'
ในแบบสอบถามของคุณเพื่อเพิ่มความเร็วของสิ่งต่าง ๆ และประหยัดทรัพยากรสิ้นเปลือง
'posts_per_page=5'