Как установить количество записей на странице используя WP_Query()

26 сент. 2011 г., 20:14:26
Просмотры: 65.7K
Голосов: 4

Я пытаюсь динамически установить количество 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, или я что-то упускаю?

0
Все ответы на вопрос 4
0
14

query_posts выполнит запрос заново (уничтожит текущий wp_query и создаст новый, а затем выполнит запрос с переданными параметрами)

Чтобы получить такое же поведение после установки нового параметра с помощью set_var, вам нужно повторно выполнить запрос к базе данных, используя что-то вроде этого:

 $wp_query->set('posts_per_page', 1);
 $wp_query->query($wp_query->query_vars);
26 сент. 2011 г. 20:41:29
0

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

26 сент. 2011 г. 20:39:29
1

Зачем вообще использовать $wp_query->set()?

Разве нельзя просто использовать:

<?php
$my_custom_query_args = array(
    'posts_per_page' => $myvar
);
$my_custom_query = new WP_Query( $my_custom_query_args );
?>
26 сент. 2011 г. 21:43:18
Комментарии

Разве вы не уничтожаете все остальные аргументы запроса таким образом? Метод ->set() должен сохранять остальные аргументы без изменений, изменя только post_per_page. Или я неправильно понимаю?

Sean Kendle Sean Kendle
13 сент. 2021 г. 19:36:08
1
-1

Вы можете использовать

$wp_query->query_vars['posts_per_page'] = 25
27 июн. 2016 г. 13:50:56
Комментарии

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

kaiser kaiser
27 июн. 2016 г. 14:35:27