За последний год было много написано об улучшениях пользовательского интерфейса WordPress: наиболее обсуждаемым изменением было улучшение написания.
Но если вы разработчик, вам захочется узнать об этом меньше и больше о том, что изменилось под капотом. Здесь я продемонстрирую одно из самых интересных изменений для разработчиков: улучшения для определенных типов запросов.
Основные изменения заключаются в следующем:
- Добавлена поддержка вложенных запросов для запросов по метаданным, датам и терминам таксономии.
- Добавлены дополнительные параметры для запроса комментариев.
- И некоторые ошибки тоже были исправлены!
Давайте посмотрим на изменения.
Вложенные Запросы
В предыдущих версиях WordPress вы могли использовать операторы AND
или OR
для определения запросов для терминов, дат и метаданных таксономии. Так, например, следующие запросы будут использоваться в запросе на сайте рецептов, который выводит рецепты быстрого завтрака:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<?php
$args = array(
‘post_type’ => ‘post’,
‘tax_query’ => array(
‘relation’ => ‘AND’,
array(
‘taxonomy’ => ‘speed’,
‘field’ => ‘slug’,
‘terms’ => array( ‘quick’ )
),
array(
‘taxonomy’ => ‘meal’,
‘field’ => ‘slug’,
‘terms’ => array( ‘breakfast’ )
)
)
);
$query = new WP_Query( $args );
?>
|
Он ищет таксономии 'speed'
и 'meal'
и выводит сообщения с терминами 'quick'
и 'breakfast'
соответственно.
Но что, если вы хотите написать более сложный запрос? Допустим, вы хотели быстрые рецепты на завтрак и медленные рецепты на обед (возможно, для тех, кто хочет быстро приготовить завтрак, чтобы у него было больше времени приготовить обед!). Вы не хотите использовать простое выражение AND
для объединения всех элементов вашего запроса, так как, например, вы получите медленные рецепты на завтрак и обед. И вы не хотите использовать оператор OR
связывающий все термины, поскольку вы получите всевозможные рецепты, в которых есть только один из запрашиваемых терминов, а также другие, которые вы хотите отфильтровать.
Хорошей новостью является то, что теперь вы можете сделать это. Чтобы запросить быстрые рецепты на завтрак и медленные рецепты на обед, вы должны использовать следующее:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<?php
$query = new WP_Query(
array(
‘tax_query’ => array(
‘relation’ => ‘OR’,
array(
‘relation’ => ‘AND’,
array(
‘taxonomy’ => ‘meal’,
‘field’ => ‘slug’,
‘terms’ => array( ‘breakfast’ )
),
array(
‘taxonomy’ => ‘speed’,
‘field’ => ‘slug’,
‘terms’ => array( ‘quick’ )
)
),
array(
‘relation’ => ‘AND’,
array(
‘taxonomy’ => ‘meal’,
‘field’ => ‘slug’,
‘terms’ => array( ‘lunch’ )
),
array(
‘taxonomy’ => ‘speed’,
‘field’ => ‘slug’,
‘terms’ => array( ‘slow’ )
)
)
)
)
);
$query = new WP_Query( $args );
?>
|
Здесь я использовал два вложенных массива:
- Внешний массив использует
OR
, потому что мы ищем сообщения, которые являются либо рецептами быстрого завтрака, либо рецептами медленного обеда. - Первый вложенный массив ищет записи, которые являются рецептами быстрого завтрака, с использованием
AND
потому что вы хотите, чтобы публикация имела оба термина. - Второй вложенный массив ищет медленные рецепты обеда, снова используя
AND
.
Конечно, вы можете варьировать свои запросы, чтобы включить несколько терминов и значений таксономии, и получить настолько сложный, насколько вам нужно.
Применение вложенных запросов: термины таксономии, метаданные и даты
В приведенном выше примере используются таксономические термины, но эта функция также была добавлена к запросам даты и метаданных. Метаданные — это то, где вещи могут стать интересными, поскольку у вас есть возможности для стольких значений.
Синтаксис работает точно так же для запросов даты и метаданных. Для мета-запросов вы заменяете tax_query
на meta_query
и используете 'key'
и 'value'
в качестве параметров. Для запросов даты вы заменяете tax_query
на date_query
и используете параметры даты, предоставленные в Кодексе WordPress.
Параметры комментария
Для запроса комментариев вы используете класс WP_Comment_Query
вместо более часто используемого класса WP_Query
. К этому классу добавлено восемь новых параметров:
-
'author__in'
: определить автора комментария (или массив авторов) -
'author__not_in'
: идентифицировать комментарии не определенного автора (или массива авторов) -
'post_author__in'
: определить автора (или массив авторов) поста, к которому был сделан комментарий -
'post_author__not_in'
: исключить комментарии к постам, написанным конкретным автором или массивом авторов -
'comment__in'
: комментарии с определенным идентификатором или массивом идентификаторов -
'comment__not_in'
: исключить комментарии с определенным идентификатором или массивом идентификаторов. -
'post__in'
: комментарии к посту или массиву постов (с использованием идентификатора поста) -
'post__not_in'
: исключить комментарии, сделанные к сообщению или массиву сообщений (используя идентификатор сообщения)
Значения, используемые для них, — это идентификатор автора, идентификатор комментария или идентификатор записи в зависимости от ситуации.
Обратите внимание, что класс WP_Comment_Query
теперь также поддерживает вложенные запросы.
Исправление ошибок
Также было исправлено несколько ошибок, которые могут оказаться полезными:
-
date_query
ошибка, приводившая к сбою запросов при использованииdate_query
вместе сtax_query
илиmeta_query
. - Когда
'orderby' => 'meta_value'
использовался при передаче'meta_query'
с отношениемOR
вWP_Query
, это использовалось для прерывания запроса. Это было исправлено.
Если вы хотите узнать подробности, вы можете найти их на основном сайте WordPress .
Резюме
Эти улучшения в запросах делают WordPress шагом вперед к полной функциональности CMS. Возможность использовать вложенные запросы означает, что вы можете выводить контент гораздо более гибкими и сложными способами. Будет интересно посмотреть, как люди их используют!