SebWeo
В сегодняшней части серии уроков по запросам WP_Query в ВордПресс мы будем рассматривать аргументы, которые можно использовать для получения публикаций по кастомным полям (специальным полям, метабоксам произвольных полей), или же мета-данным.
С помощью этого функционала вы можете добавлять расширенные данные, параметры и т.п. для различных таксономий сайта, включая публикации, страницы, категории, теги, комментарии и т.п. Эти данные могут быть практически любого допустимого формата (текст, чекбокс, поле выбора, дата и т.д.). А поля, в которых можно добавлять эти данные, имеют разные названия, а именно: кастомные поля (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 для запроса публикаций по их метаданным (или пользовательским полям). Это должно придать вам большую гибкость при работе с этим популярным движком и используемой базой данных.
В следующем (заключительном) уроке мы подведем теоретические итоги по всем урокам и рассмотрим несколько практических примеров применения полученных знаний.
WordPress годами был непревзойденным "монолитом": он отвечал и за удобную админ-панель, и за хранение данных,…
В мире веб-серверов часто говорят о противостоянии Nginx vs Apache. Но что, если бы я…
Когда я начинал свой путь в веб-разработке, вопрос "какой веб-сервер использовать?" практически не стоял. Ответ…
Когда речь заходит о веб-серверах, два имени всегда на слуху: Apache и Nginx. Apache —…
В мире веб-разработки мы постоянно сталкиваемся с проблемой: "А у меня на компьютере все работает!".…
На заре моей карьеры веб-разработчика все было относительно просто: установил локальный сервер (помните Denwer?), положил…