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

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

В этом уроке мы поговорим об параметрах для произвольных полей.

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

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

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

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

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

  • meta_key (строка): ключ произвольного поля.
  • meta_value (строка): значение произвольного поля.
  • meta_valum_num (число): значение произвольного поля.
  • meta_compare (строка): оператор для проверки значения ‘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: работает аналогично предыдущему параметру, но запрашивает противоположные данные.
  • IN: используется в массиве с аргументом ‘value’ для поиска записей с одним или несколькими значениями.
  • BETWEEN: используется в массиве с двумя числовыми значениями (указывается в аргументе meta_value) для поиска записей со значением произвольного поля между двух указанных числовых значений (но не равным им).
  • NOT BETWEEN: используется для поиска записей со значениями произвольных полей вне массива с двумя числовыми значениями, указанными с помощью аргумента meta_value.Теперь посмотрим как это работает на практике.Прежде всего, с помощью аргумента meta_compare можно исключить из запроса ключи или значения пользовательских полей. Например, для того чтобы получить все записи, за исключением записей с ключом произвольного поля key1, используйте следующий код:
    $args = array(
        'meta_key' => 'key1',
        'meta_compare' => '!='
    );
    

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

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

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

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

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

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

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

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

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

    Здесь мы ищем записи со значением произвольного поля numkey между 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_Meta_Query .

    Заключение

    Класс WP_Query обладает большой гибкостью в поиске метаданных записей (или произвольных полей), а комбинирование нескольких потенциальных аргументов с соответствующими операторами позволяет запрашивать именно те данные из базы данных, которые вам нужны.

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

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.