Статьи

Улучшения запросов в последних версиях WordPress

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