Я думаю, що зараз я розумію, що ти намагаєшся зробити. Коли ви запускаєте спеціальний запит із 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'