Сегодняшний урок практический и служит целью закрепить полученные теоретические знания из предыдущих уроков по запросу WP_Query в ВордПрессе. Используя аргументы мы создадим специальные запросы, позволяющие получить нужные нам публикации, страницы или публикации определенных типов.
Прежде чем перейти к практике, давайте еще раз кратко вспомним, как работают аргументы в WP_Query
. Для построения оптимального WP_Query
запроса (будь то в теме или плагине) мы должны задействовать четыре основных элемента:
if
и while
); сброс данных публикации (глобального $post
)
На практике это будет выглядеть примерно так:
<?php $args = array( // массив аргументов запроса ); // образец пользовательского запроса // создание нового экземпляра класса – нового объекта $query = new WP_Query( $args ); // проверка на наличие результатов запроса if ( $query->have_posts() ) { // прохождение циклом по результатам запроса while ( $query->have_posts() ) { $query->the_post(); // здесь контент публикации результата } } // обязательное восстановление (сброс) оригинальных данных публикации после запроса // перезагрузка глобальной переменной $post wp_reset_postdata(); ?>
В первом абзаце примера следует массив аргументов, указывающих WordPress, какие данные нам нужно извлечь из базы данных. И в данном уроке мы разберем это более подробно:
<?php $args = array( // массив аргументов запроса ); // ... ?>
Аргументы для запроса указываются в массиве. Схематически их указание может выглядеть следующим образом:
<?php $args = array( 'parameter1' => 'value', 'parameter2' => 'value', 'parameter3' => 'value' ); ?>
Параметры и их значения берутся в одинарные (или двойные) кавычки, между ними указывается знак =>
, а разделяются от других запятыми. Если в этом допустить ошибку, тогда движок WordPress может не правильно обработать ваш запрос или даже привести к «белому экрану смерти».
Это самый простой сценарий. Чтобы извлечь из базы данных одну определенную публикацию, можно пойти двумя путями:
p
(int)name
(string) (! это не заголовок поста)
Эти два параметра можно использовать для получения любых типов публикаций, включая посты, страницы, вложения и специальные типы публикаций (CPT — custom post type). По умолчанию WordPress отправляет запрос на тип публикации post
, но это решается дополнительным аргументом, как вы увидите дальше.
Итак, чтобы вернуть конкретную публикацию, вы можете построить запрос следующим образом:
<?php $args = array( 'p' => 125 // ID поста ); ?>
или так:
<?php $args = array( 'name' => 'ispolzovaniye-zaprosov-wp-query-v-wordpress' // слаг поста ); ?>
Использование параметра name
содержит риски, если кто-то его изменит в будущем, поэтому использование идентификатора публикации безопаснее, поскольку его нельзя изменить.
Чтобы получить одну конкретную страницу вы тоже сможете использовать 2 разных варианта:
page_id
(int)pagename
(string) (! это не заголовок страницы)Для того, чтобы получить только одну конкретную страницу из базы данных, используйте одно из следующих:
<?php $args = array( 'page_id' => '25' // ID страницы // или же так // 'pagename' => 'chast-url-adresa-stranitsy' // слаг страницы ); ?>
Если вам нужно получить публикации другого типа (не пост и не страница), включая нестандартный тип публикации (CPT), тогда используйте параметр post_type
. Например, если вам нужен один товар (публикация с типом product
), запрос может выглядеть так:
<?php $args = array( 'p' => '1907', 'post_type' => 'product' ); ?>
или если вам нужно вложение (тип attachment
— прикрепленное изображение):
<?php $args = array( 'p' => '1155', 'post_type' => 'attachment' ); ?>
В некоторых из предыдущих примеров я использовал параметр post_type
, который указывается для идентификации публикаций определенного типа. Давайте рассмотрим основные типы публикаций в WordPress:
post
: публикация с типом пост, сообщение и т.д. Это значение по умолчанию!page
: публикация с типом страницаrevision
: публикация с типом редакция (ревизия, архивная копия, автосохранение поста и т.д.)attachment
: публикация с типом вложение (миниатюры постов)nav_menu_item
: отдельный тип для пункта навигационного менюany
: для публикаций с любым типом (кроме ревизий и если тип установлен для 'exclude_from_search'
в значение true
)product
, или любой тип, созданный вами функцией register_post_type()
)
Часто бывает, что программистам сайта на ВордПресс нужно получить все страницы, которые являются дочерними для текущей страницы (кроме публикаций с типом post
— они не иерархичны). Тогда стоит воспользоваться чем-нибудь из этих трех аргументов:
post_parent
(int). Установка 0
будет возвращать только записи верхнего уровня (все родительские публикации).post_parent__in
(array):post_parent__not_in
(array).
Давайте рассмотрим каждый из этих вариантов на практике:
<?php $args = array( 'post_type' => 'page', // обязательно указывать, если это не post 'post_parent' => '18' // ID текущей страницы // чтобы найти все страницы, которые являются дочерними для данной страницы (с ID 18) ); ?>
Чтобы добавить динамики в запрос и автоматически получать ID
текущей страницы, а не записывать его «жестко», вот как это можно оформить:
<?php $current_page_id = get_the_ID(); // получить ID текущей страницы $args = array( 'post_type' => 'page', 'post_parent' => $current_page_id // динамически подставлять ID на текущей странице ); ?>
Для таких запросов можно использовать один из двух аргументов (их нельзя использовать одновременно):
post__in
(array)post__not_in
(array)
Вариант первого использования:
<?php $args = array( // перечисляем ID нужных публикаций 'post__in' => array( '177', '94', '58' ), 'post_status' => 'any', // чтобы включить публикации со всеми статусами 'ignore_sticky_posts' => 'true' // чтобы исключить "прикрепленные" публикации, ведь они всегда входят в запрос ); ?>
Другой аргумент – post__not_in
— работает подобным образом, но он выведет все публикации, кроме перечисленных в запросе. Иногда это действительно бывает полезным:
<?php $args = array( 'post_type' => 'product', // если нам нужны товары, и кроме указанных ниже // перечисляем ID товаров для исключения 'post__not_in' => array( '127', '391', '559' ) ); ?>
На сегодняшний день все. В данном уроке мы рассмотрели использование WP_Query
для создания специальных запросов на получение разнообразных публикаций. Вот какие вопросы мы рассмотрели:
Кроме этого, существует еще много других аргументов запроса, которые мы будем рассматривать в будущих уроках. Следующий практический урок серии будет посвящен рассмотрению аргументов, которые можно использовать для запроса категорий и тегов в ВордПресс.
Содержание статьи Введение: почему цены решают все Что значит сравнение цен с конкурентами 5 причин,…
В последние годы интерес к саунам в Киеве заметно вырос. Это связано не только с…
В современном ритме мегаполиса отдых стал неотъемлемой частью заботы о здоровье и эмоциональном состоянии. Особенно…
В современном мире цифрового маркетинга Facebook (Meta) остается одной из самых мощных платформ для продвижения…
Этот прибор стал незаменимым элементом арсенала представителей множества профессий, но особенно актуален среди военных. Тепловизор…
Постоянный поток новостей, рабочих задач и личных забот часто приводит к тому, что в голове…