Очень часто при создании или модификации шаблонов необходимо вывести, например, записи из определенной рубрики, в определенном количестве и т.п. Для этого используется конструкция вида:
<?php
//Запрос
query_posts(‘posts_per_page=5′);//Цикл
if ( have_posts() ) : while ( have_posts() ) : the_post();…
endwhile; else:
…
endif;
?>
Однако, очень многие, и я в том числе, забывают ставить после окончания цикла
<?php wp_reset_query(); ?>
В итоге, если у нас несколько таких условий в шаблоне, это приводит к самым неожиданным результатам, и многие просто не могут догадаться «откуда ноги растут» у того или иного «глюка». Например, в хлебных крошках может отображаеться только одна рубрика, которая упоминалась в каком-то пользовательском цикле, вместо той рубрики, в которой находится сейчас пользователь. Или на страницах ежемесячных архивов дублируются все записи без разбивки по месяцам.
Функция wp_reset_query () сбрасывает условия запроса через query_posts после выполнения в цикле, и позволяет пользовательским циклам работать корректно.
Правильная конструкция будет выглядеть так:
<?php
//Запрос
query_posts(‘posts_per_page=5′);//Цикл
if ( have_posts() ) : while ( have_posts() ) : the_post();
…
endwhile; else:
…
endif;
//Сброс запроса
wp_reset_query();
?>
Источник: wordpresse.ru