Как установить сообщения на страницу с помощью WP-запроса()


Я пытаюсь динамически задать количество posts_per_page, используя свою собственную переменную. Этот код отлично работает:

query_posts( $query_string  . "&posts_per_page=" . $myvar )
// then display the loop using get_template_part( 'loop' );

Это прекрасно работает, но я хотел бы знать, как это сделать, используя $wp_query вместо query_posts. Однако это не работает:

$wp_query->set('posts_per_page', $myvar)
// then display the loop using get_template_part( 'loop' );

Это никак не влияет на количество отображаемых сообщений. Я неправильно использую метод набора или мне чего-то не хватает?

Author: Chip Bennett, 2011-09-26

4 answers

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

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

 $wp_query->set('posts_per_page', 1);
 $wp_query->query($wp_query->query_vars);
 12
Author: hacksy, 2011-09-26 17:41:29

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

 2
Author: Milo, 2011-09-26 17:39:29

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

Не можете ли вы просто использовать:

<?php
$my_custom_query_args = array(
    'posts_per_page' => $myvar
);
$my_custom_query = new WP_Query( $my_custom_query_args );
?>
 1
Author: Chip Bennett, 2013-04-04 15:45:17

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

$wp_query->query_vars['posts_per_page'] = 25
 -1
Author: Anton, 2016-06-27 10:50:56