ฉันคิดว่าตอนนี้ฉันเข้าใจสิ่งที่คุณกำลังพยายามทำ เมื่อคุณเรียกใช้แบบสอบถามที่กำหนดเองด้วย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'