
Использование запросов WP_Query в WordPress — часть 9 (аргументы для метаданных)
В сегодняшней части серии уроков по запросам WP_Query в ВордПресс мы будем рассматривать аргументы, которые можно использовать для получения публикаций по кастомным полям (специальным полям, метабоксам произвольных полей), или же мета-данным.
Что такое мета-данные публикаций в CMS WordPress?
С помощью этого функционала вы можете добавлять расширенные данные, параметры и т.п. для различных таксономий сайта, включая публикации, страницы, категории, теги, комментарии и т.п. Эти данные могут быть практически любого допустимого формата (текст, чекбокс, поле выбора, дата и т.д.). А поля, в которых можно добавлять эти данные, имеют разные названия, а именно: кастомные поля (custom fields), произвольные поля, дополнительные поля или просто мета-данные.
WordPress содержит три основных типа метаданных, которые хранятся отдельно в базе данных и с которыми работают следующие классы: мета публикаций (класс WP_Query
), мета пользователей (класс WP_User_Query
) и мета комментариев (класс WP_Comment_Query
). Если вам нужно использовать только аргументы метаданных публикации в своем запросе (без других аргументов), вам достаточно будет использовать класс WP_Meta_Query
, который является «вспомогательным классом» для WP_Query
при фильтрации по метаданным. Он генерирует необходимый SQL запрос для поиска по мета-данным. Но основная работа «ложится на плечи» именно класса WP_Query
.
Параметры аргументов запроса для получения публикаций по мета-данным
Итак, как вы видите, функционал метаданных публикаций дополнительно управляется отдельным классом под названием WP_Meta_Query
. Это означает, что если вам нужны публикации только по их метаданным, тогда у вас на выбор есть два класса: WP_Meta_Query
или WP_Query
(который также имеет доступ к классу WP_Meta_Query
). Основное отличие между этим классом и WP_Query
состоит в том, что с первым вы можете создавать простые запросы и фильтрации на основе аргументов метаданных.
Сегодня будем рассматривать использование именно класса WP_Query
, чтобы сформировать запрос публикаций по их мета-данным. А к основным аргументам и параметрам относятся следующие:
- ключ мета-поля:
meta_key
(string) - значение мета-поля:
meta_value
(string) - значение (числовое) мета-поля:
meta_value_num
(number) - оператор для условной проверки мета-поля
'meta_value'
:meta_compare
(string). Возможные значения: ‘=
‘ (значение по умолчанию), ‘!=
‘, ‘>
‘, ‘>=
‘, ‘<
‘, ‘<=
‘, ‘LIKE
‘, ‘NOT LIKE
‘, ‘IN
‘, ‘NOT IN
‘, ‘BETWEEN
‘, ‘NOT BETWEEN
‘, ‘NOT EXISTS
‘, ‘REGEXP
‘, ‘NOT REGEXP
‘ или ‘RLIKE
‘.
С этими параметрами вы можете сформировать простой запрос мета-поля, например так:
<?php $args = array( // чтобы получить публикации с мета-полем по ключу key1 (независимо от его значения): 'meta_key' => 'key1' // если требуется конкретное значение, добавьте соответствующий аргумент в запрос: // 'meta_value' => 'value1' // ! можно использовать даже запрос только по значению, независимо от ключа ); ?>
Параметры аргументов запроса для получения публикаций с использованием аргумента meta_compare
Вы уже заметили в перечне выше, что существует много условных параметров для аргумента meta_compare
, не только расширяющего, но и немного усложняющего их использование. Поэтому давайте рассмотрим только наиболее часто используемые:
- Параметр равно:
=
. Это значение по умолчанию - Параметр не равно:
!=
- Параметр больше, чем:
>
. Меньше чем:<
- Параметр больше или равно:
>=
. Параметр меньше или равно:<=
- Параметр
LIKE
для нахождения значения, подобного поисковому: можно использовать вместе с символами обобщения; игнорирует регистр значения
Далее рассмотрим некоторые практические примеры использования этого аргумента.
Например, чтобы исключить мета-поля с определенным значением ключа, воспользуйтесь кодом следующего вида:
<?php $args = array( // поиск за исключением одного ключа 'meta_key' => 'key1', 'meta_compare' => '!=' // параметр не равно // если нужно исключить массив ключей, тогда используйте следующее сочетание параметров // 'meta_key' => 'key1, key2', // 'meta_compare' => 'NOT IN' // параметр исключения из массива ); ?>
В запросе можно использовать как числовые, так и нечисловые значения. К примеру, если у вас магазин на WordPress (WooCommerce), и вам нужно найти товары по цене в пределах 1500-1750 грн, вот как это может выглядеть:
<?php $args = array( 'meta_key' => 'someprodprice', // если товар имеет мета-поле с таким ключом // и имеет следующее значение (возможно и массив значений) 'meta_value' => array ( '1500', '1750' ), // использование параметра, позволяющего сравнить два числовых значения в диапазоне 'meta_compare' => 'BETWEEN' ); ?>
Если вам нужно сформировать запрос с использованием нескольких кастомных полей (или нескольких условных операторов), то воспользуйтесь вложенным массивом. Это стало возможным, начиная с WordPress версии 4.1.
Вот и все на сегодня. Мы рассмотрели использование класса WP_Query
для запроса публикаций по их метаданным (или пользовательским полям). Это должно придать вам большую гибкость при работе с этим популярным движком и используемой базой данных.
В следующем (заключительном) уроке мы подведем теоретические итоги по всем урокам и рассмотрим несколько практических примеров применения полученных знаний.