WP использует объект с именем $wp_query
для основного цикла. Обычно мы не видим этот объект, потому что он скрыт за have_posts()
и the_post()
, которые являются только обертками для
$wp_query->have_posts()
и $wp_query->the_post()
Если вы хотите изменить основной цикл, вы должны использовать query_posts()
перед циклом.
Если вам нужен еще один цикл, вы можете повторно использовать объект $wp_query
, используя query_posts()
перед этим новым циклом. При необходимости это можно сделать много раз.
Если по какой-то причине вам нужно сохранить объект $ wp_query вокруг THEN, вы должны использовать WP_Query
. И, конечно же, поскольку have_posts()
и the_post()
являются обертками для объекта $wp_query
, их нельзя использовать с WP_Query
. Вам лучше использовать $your_query_obj->have_posts()
, т.е.
$sidebar= WP_Query('category_name= sidebar');
while( $sidebar->have_posts() ): $sidebar->the_post();
the_title();
the_content();
endwhile;
Хороший случай, когда WP_Query
может быть лучше, чем query_posts()
, - это левая боковая панель.
Поскольку цикл кода для боковой панели, вероятно, будет помещен поверх основного цикла, вызов query_posts()
изменит объект $wp_query
, а также изменит основной цикл. В этом случае для использования query_posts()
в коде боковой панели вам также нужно будет использовать query_posts()
перед основным циклом, чтобы запросить соответствующее содержимое для этого цикла.
Таким образом, использование WP_Query для этого случая сохранит $ wp_query и, следовательно, основной цикл нетронутым.
Но, опять же, для общего сценария query_posts()
- это прекрасный способ запроса вашего контента:
query_posts('category_name=blog');
while( have_posts() ): the_post();
the_title();
the_content();
endwhile;