Почему не следует использовать query_posts() в WordPress
07.10.2017
Если вы разрабатываете темы и плагины для WordPress, то вы наверняка встречались с функцией query_posts() в многочисленных примерах и уроках в сети. В этой статье мы расскажем почему вам не следует никогда использовать эту функцию.
Основные и вторичные запросы
Основной запрос (или основной цикл) в WordPress это тот, который выполняется на раннем этапе загрузки ядра, он строится из запрошенного URL, настроек постоянных ссылок и т.д. Во время основного запроса WordPress определяет такие параметры как количество записей на страницу, используемый шаблон в теме и прочие. Основной запрос делает сам WordPress.
Пример Ajax подгрузки постов из рубрик в Wordpress - практический урок, гайд по Ajax
Вторичный запрос это тот, который выполняется дополнительно к основному. Например:
Вывести в боковой колонке список самых популярных записей Вывести выделенные записи в слайдере на главной странице Вывести записи из той же категории в блоке «похожие записи»Вторичные запросы выполняются с помощью класса WP_Query, или с помощью одной из вспомогательных функций get_posts(), query_posts() и т.д. Если вы не знакомы с WP_Query, советуем прочитать нашу статью .
Основным отличием query_posts() от других вспомогательных функций является то, что query_posts() заменяет основной цикл на новый, вторичный цикл WordPress. Это значит, что в цикле с query_posts() мы можем работать так же, как и в обычном основном цикле.
Для сравнения рассмотрим цикл для вывода популярных записей с помощью WP_Query:
// Вторичный цикл $popular = new WP_Query( ... ); while ( $popular->have_posts() ) { $popular->the_post(); the_title(); // вывести название the_content(); // вывести содержимое }Этот же цикл с помощью query_posts():
// Вторичный цикл query_posts( ... ); while ( have_posts() ) { the_post(); the_title(); // вывести название the_content(); // вывести содержимое }Безусловно второй вариант выглядит немного чище и привычнее, поскольку такая конструкция чаще всего встречается при работе с основным циклом WordPress.