Коварная война россии против Украины. Ориентировочные потери врага
(по состоянию на 03.02.2025)
841660
солдат
369
самолетов
331
вертолетов
9920
танков
20685
ББМ
22589
артиллерия
1053
ПВО
1268
РСЗО
35798
машин
28
корабли и катера
Использование запросов WP_Query в WordPress в теории и примерах — часть 1 (введение)
Опубликовано

Использование запросов WP_Query в WordPress в теории и примерах — часть 1 (введение)

 

 

Класс WP_Query — это мощный инструмент, с помощью которого можно максимально контролировать отправку запросов к базе данных в сайтах на CMS WordPress. Он является одним из самых мощных API, которым владеет этот популярный двигатель.

Поскольку данная тема очень большая и объемная, ее рассмотрение будет разделено на несколько отдельных подтем в серии. А в сегодняшнем уроке мы приступим к обзору запросов WP_Query в WordPress и проведем вводное ознакомление с этим инструментом.

 

Начало освоения запросов WP_Query у ВордПресс

С помощью запроса WP_Query мы можем выбирать нужные нам публикации (статьи, посты, страницы и т.п.) по определенным нами же критериям (параметрам) из используемой движком WordPress базы данных. Этот API является сверхмощным инструментом для разработчика сайтов на CMS WordPress.

По умолчанию WordPress «в фоновом режиме» уже выполняет такие запросы на каждой текущей странице — с учетом используемого типа публикации и/или ее иерархии. К примеру, если просматривается статическая страница (тип page), WordPress запускает запрос для отображения страницы с соответствующим ID (идентификатором), а если просматривается архивная страница (категория, теги, по дате и т.д.) результатом запроса будут все публикации данного типа архивов.

Но если мне как программисту не нужен дефолтный запрос, а нужно что-то более уникальное? Например, чтобы выбрать из базы данных 5 последних записей определенной категории? Краткий ответ – это не проблема с использованием класса WP_Query и его огромным количеством параметров! С его помощью вы можете показывать именно тот контент, который вам нужен!

Итак, давайте приступим к изучению этой сложной темы и посмотрим на все тонкости использования WP_Query.

 

Что такое WP_Query?

WP_Query – это класс, встроенный в двигатель WordPress. А это значит, что вам не нужно писать свой класс, ведь у вас уже есть быстрый доступ ко всем готовым переменным, условным проверкам и функциям/методам. Что является очень удобным и надежным моментом при кодировании сайта.

Класс WP_Query состоит из четырех основных компонентов:

  1. аргументы для запроса с использованием параметров
  2. непосредственно сам запрос
  3. работа с результирующим циклом (заголовки, даты, контент и т.д.)
  4. завершение запроса и сброс данных публикации (глобального $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, может быть, вас нужно будет убеждать в целесообразности его использования? Поскольку есть другие методы, зачем использовать этот вид запроса? Давайте разберемся в данном вопросе.

Чтобы создать собственный запрос к базе данных, в вашем распоряжении есть не только WP_Query, ведь это не единственный метод и есть еще четыре:

  1. pre_get_posts – очень эффективный хук, если вам нужно изменить (модифицировать) основной запрос. Должен быть в самом начале вашего запроса. Нельзя использовать для создания абсолютно нового запроса.
  2. get_posts() — этот тег в шаблонах фактически использует класс WP_Query, но является промежуточным дополнительным звеном, чтобы делать запрос постов.
  3. get_pages() — также, как и предыдущий тэг, дополнительно вызывает класс WP_Query для запроса страниц вместо того, чтобы делать это напрямую.
  4. query_posts() — изменяет основной запрос, отбрасывая его и начиная с самого начала (что может отрицательно влиять на время загрузки страницы). При необходимости в изменении основного запроса лучше использовать вместо него pre_get_posts. А если есть необходимость в совершенно новом запросе, тогда лучше всего использовать непосредственно WP_Query.

Итак, как вы можете видеть, все рассмотренные методы являются тем или иным видом использования класса WP_Query, поэтому почему бы не делать это напрямую, без вспомогательных этапов?

 

Ниже можно графически представить себе работу класса WP_Query по запросу в базу данных. Данная инфографика навеяна работой Андрея «Rarst» Савченко.

Схематическая работа функций запросов к базе данных в CMS WordPress:

схематическая работа функций запросов к базе данных в CMS WordPress

 

Когда использовать WP_Query?

Перечислить все варианты использования WP_Query невозможно, но к основным способам можно отнести следующее:

  • для более настраиваемого получения перечня последних сообщений в сайдбаре (или футере), в отличие от тематического виджета «Последние публикации»
  • если вам нужно привести список связанных публикаций под текущей публикацией (например, из той же категории)
  • если вам нужно использовать более одного запроса на странице (например, отдельные списки постов вверху и внизу сайта, в сайдбаре и т.д.)
  • если вам нужно создать специальные запросы с использованием нескольких таксономий (категории, теги, меню и т.д.)
  • если дефолтный запрос вас не удовлетворяет (например, если вам нужны специфические типы публикаций, таких как вложения — attachment и т.д.)

 

Потенциальные подводные камни, некоторые оговорки, о чем следует знать

Если вы разработчик сайтов на WordPress, класс WP_Query будет для вас как находка. Особенно если вы используете специальные, уникальные, кастомные запросы. Но есть несколько вещей, о которых вам следует знать, ведь ничто не идеально, и здесь есть свои подводные камни:

  • Если вам нужно только изменить визуальную составляющую отображения публикаций определенного типа, не используйте WP_Query. Вместо этого лучше создать отдельный файл шаблона для этого типа контента (архива) и использовать измененный цикл в этом файле шаблона.
  • Если вам нужно лишь немного модифицировать запрос (например, показывать другое количество публикаций на архивной странице, или не показывать определенную категорию), не используйте для этого WP_Query, чтобы создать совершенно новый запрос. Лучше воспользоваться функционалом pre_get_posts для изменения основного запроса, в сочетании с условными тегами, чтобы точно определить место применения.
  • Хотя вы можете создать на странице десяток разных запросов, лучше такого избегать. Это негативно отразится на сервере и подключении к базе данных. При необходимости в более чем пяти запросах на странице возможно лучшим вариантом будет создание дополнительных отдельных страниц для этого.

 

 

Вместо краткого вывода

Класс WP_Query — это мощный и очень полезный инструмент, встроенный в движок ВордПресс. Следовательно, вам не нужно придумывать свой код, чтобы иметь быстрый доступ ко всем готовым переменным, условным проверкам и функциям/методам при запросе контента из базы данных. Что является очень удобным и надежным моментом при кодировании сайта, особенно для создания пользовательских запросов и обеспечения того, чтобы сайт работал именно так, как вы хотите.

В дальнейших уроках мы более подробно и глубже погрузимся в данную проблематику, чтобы вы могли использовать мощность запросов WP_Query на максимальном уровне.

 

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Быстрый доступ по сайту SebWeo
Угости меня кофе