За последний год было много написано об улучшениях пользовательского интерфейса 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. Возможность использовать вложенные запросы означает, что вы можете выводить контент гораздо более гибкими и сложными способами. Будет интересно посмотреть, как люди их используют!