Статьи

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

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

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

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

Прежде чем мы начнем, давайте WP_Query как работают аргументы в WP_Query . Когда вы WP_Query в своих темах или плагинах, вам нужно включить четыре основных элемента:

  • аргументы для запроса, используя параметры, которые будут рассмотрены в этом руководстве
  • сам запрос
  • петля
  • завершение: закрытие тегов if и while и сброс данных поста

На практике это будет выглядеть примерно так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
 
$args = array(
    // Arguments for your query.
);
 
// Custom query.
$query = new WP_Query( $args );
 
// Check that we have query results.
if ( $query->have_posts() ) {
 
    // Start looping over the query results.
    while ( $query->have_posts() ) {
 
        $query->the_post();
 
        // Contents of the queried post results go here.
 
    }
 
}
 
// Restore original post data.
wp_reset_postdata();
 
?>

Аргументы говорят WordPress, какие данные нужно извлечь из базы данных, и это те, которые я расскажу здесь. Итак, все, на чем мы концентрируемся, это первая часть кода:

1
2
3
$args = array(
    // Arguments for your query.
);

Как видите, аргументы содержатся в массиве. В этом уроке вы узнаете, как их кодировать.

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

1
2
3
4
5
$args = array(
    ‘parameter1’ => ‘value’,
    ‘parameter2’ => ‘value’,
    ‘parameter3’ => ‘value’
);

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

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

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

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

  • meta_key ( string ): ключ настраиваемого поля.
  • meta_value ( строка ): значение настраиваемого поля.
  • 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 (независимо от его значения), вы используете этот аргумент:

1
2
3
$args = array(
    ‘meta_key’ => ‘key1’
);

Это вернет все сообщения с настраиваемым полем с ключом key1 , независимо от значения.

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

1
2
3
4
$args = array(
    ‘meta_key’ => ‘key1’,
    ‘meta_value’ => ‘value1’
);

Это вернет все сообщения с настраиваемым полем с ключом key1 и value1 для него.

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

1
2
3
$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 аргумент meta_compare . Таким образом, чтобы получить все сообщения, кроме тех, которые имеют настраиваемое поле с ключом key1 , вы должны использовать это:

1
2
3
4
$args = array(
    ‘meta_key’ => ‘key1’,
    ‘meta_compare’ => ‘!=’
);

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

1
2
3
4
$args = array(
    ‘meta_key’ => ‘key1, key2’,
    ‘meta_compare’ => ‘NOT IN’
);

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

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

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

1
2
3
4
5
$args = array(
    ‘meta_key’ => ‘numkey’,
    ‘meta_value’ => ‘100’,
    ‘meta_compare’ => ‘>’
);

Это вернет все сообщения с настраиваемым полем с ключом numkey и значением более 100 . Если вы хотите запросить значения 100 или более, вы должны использовать 'meta_compare' => '>=' .

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

1
2
3
4
5
6
7
8
$args = array(
    ‘meta_key’ => ‘numkey’,
    ‘meta_value’ => array (
        ‘100’,
        ‘200’
    ),
    ‘meta_compare’ => ‘BETWEEN’
);

Это позволит найти все сообщения со значением в настраиваемом поле numkey от 100 до 200.

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

Они принимают следующую структуру:

1
2
3
4
5
6
7
8
$args = array(
    ‘meta_query’ => array(
        ‘relation’ => », // Optional argument.
        array(
            // `meta_query` arguments go here.
        )
    )
);

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

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
$args = array(
    ‘meta_query’ => array(
        ‘relation’ => », // Optional argument.
        array(
            ‘relation’ => »,
            array (
                // First set of `meta_query` arguments go here.
            ),
            array (
                // Second set of `meta_query` arguments go here.
            )
        )
    )
);

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

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

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