По умолчанию WordPress выполняет query запрос на каждой странице, отображаемой на вашем сайте, характер запроса определяется типом просматриваемой страницы. Так что если просматривается статическая страница , WordPress запускает запрос для отображения страницы с соответствующим идентификатором, а если просматривается архив, запрос будет получать все записи в этом архиве.

Но иногда хочется выполнить запрос немного по-другому. Либо в основном содержимом страницы либо в другом месте страницы (например, в сайдбаре или футере), вам может потребоваться отобразить некоторое специфическое содержание, которое не выводится в стандартном запросе.

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

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

В этом введении я расскажу о следующем:

  • Что такое WP_Query?
  • Зачем использовать WP_Query?
  • Потенциальные проблемы (чтобы быть в курсе).

Что Такое WP_Query?

WP_Query-это класс, который предоставляет WordPress. Тот факт, что это класс означает, что с его помощью вы можете быстро получить доступ к переменным, проверкам и функциям, которые были закодированы в данном классе ядра WordPress, не беспокоясь о том, как писать весь код самостоятельно. Это делает ваш код более эффективным и надежным.

WP_Query состоит из четырех основных элементов:

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

На практике это будет выглядеть примерно следующим образом:


<?php $args = array( 
   // аргументы для запроса 
); 
// запрос 
$query = new WP_Query( $args ); 
// цикл
 if ( $query->have_posts() ) :  
while ( $query->have_posts() ) : 
$query->the_post() ;

// contents of the Loop go here

endwhile : endif;
/* сброс запроса */
wp_reset_postdata();
?>

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

Сброс Данных Запроса

В приведенном выше примере я добавил функцию wp_reset_postdata() после запроса. Это важно, потому что она сбрасывает глобальную переменную $wp_query в исходное состояние для текущей страницы.

Например, если вы используете WP_Query для выполнения запроса в боковой панели, используя wp_reset_postdata(), то вы эффективно рассказываете WordPress, что в основной части страницы он должен работать для нее с запросом по умолчанию.

Если Вы не сделаете этого, любые другие запросы выполняющиеся на странице (в том числе запрос по умолчанию), могут работать не корректно, и любые условные теги проверки просматриваемой страницы не будут работать.

Зачем Использовать WP_Query?

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

Зачем Использовать WP_Query В Сравнении С Другими Методами?

WP_Query – это не единственный способ для создания пользовательского запроса. Есть еще четыре:

  • pre_get_posts
  • get_posts()
  • get_pages()
  • query_posts() (его желательно избегать, позже я это объясню)

Я не буду сейчас вдаваться в подробности того, как каждый из этих способов работает, но будет полезно знать, когда они используются:

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

На приведенной ниже схеме, сделанной Андреем “Rarst” Савченко под лицензией Creative Commons , отображен краткий смысл этих методов:

Освоение WP_Query

Когда Вы Могли Бы Использовать WP_Query

Существует множество сценариев, когда WP_Query пригодится, и я не могу охватить их все здесь, но вот краткий обзор:

  • Чтобы добавить список записей связанных с текущей – например, список всех записей в той же категории.
  • Создать два цикла на одной и той же странице: например, страница FAQ с названиями вопросов в верхней части и содержимым ниже.
  • Чтобы создать пользовательский список последних постов в сайдбаре или футере вашего сайта, когда виджет “последние сообщения” не выводит то, что вам нужно.
  • Для создания пользовательских запросов для таксономий, с использованием более чем одной таксономии для определения того, что нужно показывать.
  • Для запроса к типам записей, которые не выводятся по умолчанию, например, такие как вложения.
  • Для создания пользовательских страниц с выводом на них разных типов Контента.

Резюме

Класс WP_Query-это мощный и крайне полезный инструмент для создания пользовательских запросов и оформления вашего сайта. При его использовании WordPress ведет себя именно так, как вы этого хотите. Как мы рассмотрели, бывают задачи, когда лучше использовать другие методы для создания пользовательских запросов, но он имеет широкий спектр применения.

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

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.