Если вы WP_Query
за этой серией, вы поймете, как структурирован WP_Query
и как вы используете его для написания пользовательских запросов. Чтобы определить, что WP_Query
выбирает из базы данных, вам необходимо знать, какие аргументы можно использовать для запроса данных.
WP_Query
имеет большое количество возможных аргументов, что делает его чрезвычайно гибким. Поскольку вы можете использовать его для запроса практически всего, что содержится в вашей таблице wp_posts
, у него есть аргументы для каждой перестановки запроса, который вы, возможно, захотите выполнить для своего контента.
В этом уроке я рассмотрю аргументы для пользовательских полей. Но сначала краткий обзор того, как вы WP_Query
аргументы в 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
аргумент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
, который будет рассмотрен далее в этой серии.