Класс WP_Query — это мощный инструмент, с помощью которого можно максимально контролировать отправку запросов к базе данных в сайтах на CMS WordPress. Он является одним из самых мощных API, которым владеет этот популярный двигатель.
Поскольку данная тема очень большая и объемная, ее рассмотрение будет разделено на несколько отдельных подтем в серии. А в сегодняшнем уроке мы приступим к обзору запросов WP_Query
в WordPress и проведем вводное ознакомление с этим инструментом.
С помощью запроса WP_Query
мы можем выбирать нужные нам публикации (статьи, посты, страницы и т.п.) по определенным нами же критериям (параметрам) из используемой движком WordPress базы данных. Этот API является сверхмощным инструментом для разработчика сайтов на CMS WordPress.
По умолчанию WordPress «в фоновом режиме» уже выполняет такие запросы на каждой текущей странице — с учетом используемого типа публикации и/или ее иерархии. К примеру, если просматривается статическая страница (тип page
), WordPress запускает запрос для отображения страницы с соответствующим ID (идентификатором), а если просматривается архивная страница (категория, теги, по дате и т.д.) результатом запроса будут все публикации данного типа архивов.
Но если мне как программисту не нужен дефолтный запрос, а нужно что-то более уникальное? Например, чтобы выбрать из базы данных 5 последних записей определенной категории? Краткий ответ – это не проблема с использованием класса WP_Query
и его огромным количеством параметров! С его помощью вы можете показывать именно тот контент, который вам нужен!
Итак, давайте приступим к изучению этой сложной темы и посмотрим на все тонкости использования WP_Query
.
WP_Query – это класс, встроенный в двигатель WordPress. А это значит, что вам не нужно писать свой класс, ведь у вас уже есть быстрый доступ ко всем готовым переменным, условным проверкам и функциям/методам. Что является очень удобным и надежным моментом при кодировании сайта.
Класс WP_Query
состоит из четырех основных компонентов:
$post
)
На практике примерный вид запроса может выглядеть приблизительно так:
<?php $args = array( // массив аргументов запроса ); // образец пользовательского запроса // создание нового экземпляра класса – нового объекта $query = new WP_Query( $args ); // проверка на наличие результатов запроса if ( $query->have_posts() ) { // прохождение циклом по результатам запроса while ( $query->have_posts() ) { $query->the_post(); // здесь контент публикации результата } } // обязательное восстановление (сброс) оригинальных данных публикации после запроса // перезагрузка глобальной переменной $post wp_reset_postdata(); ?>
ВАЖНО: восстановление (сброс) данных публикации после запроса
В конце приведенного выше примера вы можете видеть строку wp_reset_postdata();
— это очень важно, поскольку запрос должен возвращаться в первоначальное состояние (основной запрос, выполняемый на этой странице). Это условие возникает вследствие того, что на одной странице может быть множество запросов, и поэтому они могут конфликтовать, а вы получите совсем не те результаты, которых ожидали.
Если вы ранее не пользовались классом WP_Query
, может быть, вас нужно будет убеждать в целесообразности его использования? Поскольку есть другие методы, зачем использовать этот вид запроса? Давайте разберемся в данном вопросе.
Чтобы создать собственный запрос к базе данных, в вашем распоряжении есть не только WP_Query
, ведь это не единственный метод и есть еще четыре:
pre_get_posts
– очень эффективный хук, если вам нужно изменить (модифицировать) основной запрос. Должен быть в самом начале вашего запроса. Нельзя использовать для создания абсолютно нового запроса.get_posts()
— этот тег в шаблонах фактически использует класс WP_Query
, но является промежуточным дополнительным звеном, чтобы делать запрос постов.get_pages()
— также, как и предыдущий тэг, дополнительно вызывает класс WP_Query
для запроса страниц вместо того, чтобы делать это напрямую.query_posts()
— изменяет основной запрос, отбрасывая его и начиная с самого начала (что может отрицательно влиять на время загрузки страницы). При необходимости в изменении основного запроса лучше использовать вместо него pre_get_posts
. А если есть необходимость в совершенно новом запросе, тогда лучше всего использовать непосредственно WP_Query
.Итак, как вы можете видеть, все рассмотренные методы являются тем или иным видом использования класса WP_Query
, поэтому почему бы не делать это напрямую, без вспомогательных этапов?
Ниже можно графически представить себе работу класса WP_Query
по запросу в базу данных. Данная инфографика навеяна работой Андрея «Rarst» Савченко.
Схематическая работа функций запросов к базе данных в CMS WordPress:
Перечислить все варианты использования WP_Query
невозможно, но к основным способам можно отнести следующее:
attachment
и т.д.)
Если вы разработчик сайтов на WordPress, класс WP_Query
будет для вас как находка. Особенно если вы используете специальные, уникальные, кастомные запросы. Но есть несколько вещей, о которых вам следует знать, ведь ничто не идеально, и здесь есть свои подводные камни:
WP_Query
. Вместо этого лучше создать отдельный файл шаблона для этого типа контента (архива) и использовать измененный цикл в этом файле шаблона.WP_Query
, чтобы создать совершенно новый запрос. Лучше воспользоваться функционалом pre_get_posts
для изменения основного запроса, в сочетании с условными тегами, чтобы точно определить место применения.
Класс WP_Query
— это мощный и очень полезный инструмент, встроенный в движок ВордПресс. Следовательно, вам не нужно придумывать свой код, чтобы иметь быстрый доступ ко всем готовым переменным, условным проверкам и функциям/методам при запросе контента из базы данных. Что является очень удобным и надежным моментом при кодировании сайта, особенно для создания пользовательских запросов и обеспечения того, чтобы сайт работал именно так, как вы хотите.
В дальнейших уроках мы более подробно и глубже погрузимся в данную проблематику, чтобы вы могли использовать мощность запросов WP_Query
на максимальном уровне.
Алмазная мозаика https://artstreet.com.ua/catalog/almaznaya-mozaika требует бережного обращения как в процессе её создания, так и после завершения…
Семена чиа – это маленькие зернышки, которые включают в себя большое количество полезных веществ. Они…
Вы никогда не пересечете океан, если не наберетесь мужества оставить берег позади Христофор Колумб
Забота о ногах — это не только вопрос здоровья, но и основа ежедневного комфорта. Ведь…