Как установить количество записей на странице используя WP_Query()
Я пытаюсь динамически установить количество posts_per_page используя свою переменную. Этот код работает нормально:
query_posts( $query_string . "&posts_per_page=" . $myvar )
// затем отображаем цикл используя get_template_part( 'loop' );
Это работает хорошо, но я хотел бы узнать, как сделать то же самое, используя $wp_query вместо query_posts. Однако, это не работает:
$wp_query->set('posts_per_page', $myvar)
// затем отображаем цикл используя get_template_part( 'loop' );
Это не влияет на количество отображаемых записей. Я неправильно использую метод set, или я что-то упускаю?

query_posts
выполнит запрос заново (уничтожит текущий wp_query и создаст новый, а затем выполнит запрос с переданными параметрами)
Чтобы получить такое же поведение после установки нового параметра с помощью set_var
, вам нужно повторно выполнить запрос к базе данных, используя что-то вроде этого:
$wp_query->set('posts_per_page', 1);
$wp_query->query($wp_query->query_vars);

когда вы вызываете query_posts
с модифицированным запросом в шаблоне, вы фактически запускаете новый запрос и отбрасываете оригинальный. попытка установить переменную запроса в шаблоне не работает, потому что оригинальный запрос уже произошел. чтобы использовать $wp_query->set()
, вам нужно подключиться до выполнения запроса к базе данных, например на хуке pre_get_posts
.

Привет! Не мог бы ты быть немного более подробным в своих ответах и объяснить почему этот ответ полезен? Иначе ответы автоматически помечаются ботом сообщества как низкого качества. Спасибо. Подсказка: Тебе понадобится как минимум обернуть вызов в callback-функцию, прикрепленную к фильтру :)
