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

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

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

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

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

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

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

<?php$args = array( // Аргументы для запроса);// Произвольный запрос$query = new WP_Query( $args);// Проверка наличия результатов запросаif( $query->have_posts()) { // начало цикла обработки данных из результатов запроса while( $query->have_posts()) { $query->the_post(); // содержимое опрашиваемой записи }}// восстановление исходных данных записиwp_reset_postdata();?>

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

$args = array(  // Аргументы для  запроса);

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

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

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

$args = array(    'parameter1' => 'value',    'parameter2' => 'value',    'parameter3' => 'value');

Необходимо заключать настройки и их значения в одинарные кавычки, а также использовать => между ними. Каждый аргумент разделяется запятой. Если здесь что-то сделать неправильно, то 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(независимо от его значения), необходимо использовать следующий аргумент:

$args = array(    'meta_key' => 'key1');

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

$args = array(    'meta_key' => 'key1',    'meta_value' => 'value1');

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

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

$args = array(    'meta_value' => '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, необходимо использовать следующий код:

$args = array(    'meta_key' => 'key1',    'meta_compare' => '!=');

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

$args = array(    'meta_key' => 'key1, key2',    'meta_compare' => 'NOT IN');

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

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

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

$args = array(    'meta_key' => 'numkey',    'meta_value' => '100',    'meta_compare' => '>');

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

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

$args = array(    'meta_key' => 'numkey',    'meta_value' => array (        '100',        '200'    ),    'meta_compare' => 'BETWEEN');

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

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

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

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

$args = array(    'meta_query' => array(        'relation' => '', // Опциональный аргумент.        array(            // здесь будут аргументы `meta_query`.        )    ));

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

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

$args = array(    'meta_query' => array(        'relation' => '', // Опциональный аргумент.        array(            'relation' => '',            array (                // Первый набор аргументов `meta_query`.            ),            array (                // Второй набор аргументов `meta_query`.            )        )    ));

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

В завершение

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *