Как установить сообщения на страницу с помощью 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' );
Это никак не влияет на количество отображаемых сообщений. Я неправильно использую метод набора или мне чего-то не хватает?
4 answers
query_posts
выполнит запрос снова (уничтожит текущий wp_query и создаст новый, а затем выполнит запрос с параметрами, которые вы ему передадите)
Чтобы получить такое же поведение после установки нового параметра с помощью set_var
, вам нужно снова запросить базу данных, используя что-то вроде этого
$wp_query->set('posts_per_page', 1);
$wp_query->query($wp_query->query_vars);
Когда вы вызываете query_posts
с измененным запросом в своем шаблоне, вы фактически выполняете другой запрос и отбрасываете оригинал. попытка установить var запроса в вашем шаблоне не работает, потому что исходный запрос уже выполнен. чтобы использовать $wp_query->set()
, вам нужно подключить до того, как будет запрошена база данных, например, на pre_get_posts
.
Зачем вам вообще нужно использовать $wp_query->set()
?
Не можете ли вы просто использовать:
<?php
$my_custom_query_args = array(
'posts_per_page' => $myvar
);
$my_custom_query = new WP_Query( $my_custom_query_args );
?>
Вы можете использовать
$wp_query->query_vars['posts_per_page'] = 25