Я исследовал Google и WPSE, и единственное, что я вижу неоднократно, - это использование showposts
, которое устарело.
Я знаком с WP_Query
, и я подумал, что если я установлю posts_per_page
свой лимит (то есть 5), и nopaging
для true
, это станет что-то вроде « Хорошо, я дам вам только 5 сообщений ». Но это не работает.
Как я могу это сделать?
'posts_per_page=5'
found_posts
свойству, он говорит, что число больше 5. Я хочу, чтобы мой запрос содержал только 5 сообщений. Является ли это возможным? @PieterGoosennopaging
параметр, установив его в true, чтобы получить все сообщенияnopaging
параметр, он получит значение по умолчанию, то естьfalse
на первой странице будет 5 сообщений, но запрос будет больше. Я добавляю изображение к вопросу.Ответы:
Я думаю, что теперь я понимаю, что вы пытаетесь сделать. Когда вы запускаете пользовательский запрос с помощью
WP_Query
и устанавливаете лимит для получения только 5 сообщений на страницу, запрос будет получать только 5 сообщений, и этот запрос будет содержать только 5 сообщений, НО для разбивки на страницы, он по-WP_Query
прежнему будет проходить через всю базу данных. и подсчитывает все сообщения, которые соответствуют критериям запроса.Это можно увидеть , когда вы смотрите на
$found_posts
и$max_num_pages
свойства запроса. Давайте возьмем пример:У вас есть 20 сообщений, относящихся к типу сообщений по умолчанию
post
. Вам нужны только последние 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'
в своем запросе ускорить процесс и сэкономить на растрате ресурсов.источник
После разговора с @Pieter Goosen о комментариях к вопросу, я думаю, что смогу ответить на вопрос и объяснить свою ошибку.
Ключ в том, что
found_posts
меня смущало. Я думаю, что это число полученных сообщений, но это не так. Это количество постов, которые соответствуют критериям . Это похоже наWP_Query
две части: одну для поиска (всех) сообщений и другую для извлечения контента, когда он проверяетpagination
параметры. Таким образом, у нас есть$post_count
свойство, которое представляет собой количество извлеченных постов (говорит КодексThe number of posts being displayed
), которое, конечно же, равно числу вposts_per_page
параметре и количеству элементов в$posts
свойстве массива.Так
WP_Query
что не делает никакой бесполезной работы, как я думал ^^Надеюсь, что это помогает другим!
источник
Хорошо, теперь у вас есть тип поста под названием blog_posts, и вы хотите получить 5 постов этого типа. Вот что нужно сделать
Приведенный выше запрос вернет 5 сообщений типа 'blog_posts', если это не пользовательский тип сообщения, просто замените его следующим образом,
'post_type' => 'posts',
если вы хотите получить все сообщения, затем замените его следующим образом'posts_per_page' => '-1',
, для получения более подробной информации WP Queryисточник
Я знаю, что @ user1750063 упомянул код, но попробуйте это
источник
id
недопустимо в качествеorderby
значения иpagination
является недопустимым параметромpagination
не является допустимым параметром. Вы имеете в виду'nopaging' => true
? Если да, то я получу ВСЕ сообщения. Это не то, что я хочу. @PieterGoosen Я думаю, он имеет в видуID
.ID
, нетid