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