Home News

Почему не следует использовать 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.

rss