Аргументы WP_Query: Произвольные поля

Аргументы WP_Query: Произвольные поля

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

Сегодня мы познакомимся с аргументами для произвольных полей ( custom fields ), но сначала вспомним, как использовать аргументы в WP_Query .

Вспоминаем, как работают аргументы в WP_Query

Когда вы используете WP_Query в темах оформления или плагинах, приходится включать в код четыре основных элемента:

  • Аргументы для запроса, в которых используются параметры;
  • Сам запрос;
  • Цикл;
  • Завершающий этап: сброс данных записи.

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

Аргументы сообщают WordPress , какие данные нужно извлекать из базы данных:

Как видно, аргументы заключены в массив.

Создаем код для аргументов

Существует специальный способ задания аргументов в массиве:

Нужно заключать параметры и их значения в одинарные кавычки, а также использовать => между ними. Каждый аргумент разделяется запятой. Если здесь что-то сделать неправильно, то WordPress может опросить не все указанные вами аргументы, и на экран ничего не выведется.

Параметры произвольных полей

Произвольные поля ( также известные как метаданные записей ) могут использовать отдельный класс WP_Meta_Query . Поэтому для получения метаданных записи, можно использовать либо WP_Meta_Query , либо WP_Query ( который все равно обращается к WP_Meta_Query ). Но если требуется сделать запрос метаданных и других элементов ( вроде типа записи ), то следует использовать только WP_Query .

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

Параметры для простого запроса произвольного поля

Основные параметры WP_Query для выполнения запросов к произвольным полям:

  • meta_key ( string ): ключ произвольного поля;
  • meta_value ( string ): значение произвольного поля;
  • meta_value_num ( number ): значение произвольного поля;
  • meta_compare ( string ): оператор для тестирования ' meta_value '. Допустимые значения: '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP' или 'RLIKE'. Значение по умолчанию: '='.

Используйте эти параметры для создания простых запросов к произвольным полям. Например, чтобы вывести записи, в которых имеются произвольные поля с ключом key1 ( независимо от его значения ), нужно использовать следующий аргумент:

Этот аргумент позволит получить все записи с произвольным полем с ключом key1 , независимо от значения. Для присваивания конкретного значения нужно добавить дополнительный аргумент:

Такой аргумент выведет все записи с произвольным полем, у которого имеется ключ key1 со значением value1 .

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

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

Используем аргумент meta_compare

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

  • =: Равно. Это параметр по умолчанию. То есть, если вы не используете аргумент meta_compare , WP_Query будет использовать именно его;
  • !+: Не равно;
  • >: Больше чем;
  • >=: Больше или равно;
  • < : Меньше чем;
  • LIKE: Этот параметр игнорирует регистр, в котором вы вносите значение. Здесь даже можете использовать специальные символы для поиска значений;
  • NOT LIKE: Работает по тому же принципу, что и LIKE, только абсолютно противоположно;
  • IN: Используйте этот параметр с массивом в аргументе ‘value’ для поиска записей с одним или несколькими значениями в массиве;
  • BETWEEN: Используется с массивом из двух числовых значений (указанных в аргументе meta_value) для поиска записей со значением произвольного поля, находящимся между этими двумя значениями (но не равным им);
  • NOT BETWEEN: Осуществляет запрос записей со значением произвольного поля, находящимся за пределами указанного интервала из двух цифровых значений в meta_value.

При помощи аргумента meta_compare вы можете исключить ключи или значения произвольного поля. Для того чтобы извлечь все записи, за исключением тех, в значении ключа которых используется key1 , нужно использовать следующий код:

Можно использовать значение ‘NOT IN’ в аргументе meta_compare , который также может применяться со строкой из нескольких значений:

Этот код выполняет запрос записей, у которых нет произвольных полей со значениями key1 или key2 . Если нужно запросить записи с определенным произвольным полем, но не с другим, то можно использовать вложенный массив, о котором я вам расскажу позже.

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

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

Этот запрос позволит получить все записи, значением произвольного поля которых является значение выше 100. Если нужно запросить записи со значениями от 100 и выше, то можно использовать параметр 'meta_compare' => '>=' .

Также при помощи аргумента BETWEEN и массива можно находить записи, в произвольных полях которых используются значения в определенном диапазоне:

Такой запрос позволит найти все записи со значением произвольных полей между 100 и 200.

Запросы для вложенных произвольных полей

Если нужно выполнить запрос по нескольким произвольным полям или использовать более одного оператора, то можно воспользоваться вложенным массивом.

Структура запроса будет следующей:

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

После выхода WordPress версии 4.1 стало можно использовать несколько уровней вложенных массивов для создания еще более сложных и точных запросов. Структура таких запросов выглядит примерно так:

Такой подход позволяет использовать различные взаимосвязи на разных уровнях в запросе. К примеру, можно создать запрос записей с одним значением в одном произвольном поле, и обоими значениями в другом произвольном поле.

В завершение

Применение класса WP_Query для создания запросов метаданных записей ( или произвольных полей ) предоставляет гибкость при работе с множеством различных аргументов в сочетании с операторами.

Если в своем запросе вы хотите использовать только аргументы метаданных записей ( и не комбинировать их с другими ), то можно также использовать класс WP_Meta_Query , о котором мы поговорим позже.

📎📎📎📎📎📎📎📎📎📎