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

24 января 2018

В течение прошлого года было много написано об улучшениях в пользовательском интерфейсе WordPress: наиболее обсуждаемые изменения были улучшенным опытом написания.

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

Основные изменения заключаются в следующем:

Поддержка для вложенных запросов добавлена для запросов в почтовых метаданных, датах и терминах таксономии. Дополнительные параметры были добавлены для запроса комментариев. И также были исправлены некоторые ошибки!

Давайте посмотрим на изменения.

Вложенные запросы

В предыдущих версиях WordPress вы могли использовать оператор AND или OR для определения запросов для таксономии, дат и метаданных. Так, например, следующие аргументы будут использоваться в запросе на сайте рецепта, который выводит быстрые рецепты завтрака:

<?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 );
?>

Это ищет «скоростные» и «пищевые» таксономии и выводит сообщения с «быстрыми» и «завтраками» соответственно.

Но что, если вы хотите написать более сложный запрос? Предположим, вам нужны быстрые рецепты на завтрак и медленные рецепты на обед (возможно, для тех, кто хочет быстро позавтракать, чтобы у них было больше времени, чтобы приготовить обед!). Вы не хотите использовать простой оператор AND для объединения всех элементов вашего запроса, так как тогда вы, например, получите медленные рецепты на завтрак и обед. И вы не хотите использовать оператор OR, связывающий все термины, так как вы получите все рецепты, у которых есть только один из запрошенных терминов, а также другие, которые вы хотите отфильтровать.

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

<?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, потому что мы ищем сообщения, которые являются либо быстрыми рецептами завтрака, либо медленными рецептами обеда. NВпервые вложенный массив ищет сообщения, которые являются быстрым завтраком рецепты, используя AND, потому что вы хотите, чтобы почта имела оба условия. Внутренний вложенный массив ищет медленные рецепты на обед, снова используя AND.

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

Применение вложенных запросов: таксономические термины, метаданные и даты

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

Синтаксис работает точно так же для запросов даты и метаданных. Для мета-запросов вы заменяете tax_query на meta_query и используете «ключ» и «значение» в качестве параметров. Для запросов даты вы заменяете tax_query на date_query и используете параметры даты, указанные в WordPress Codex.

Параметры комментариев

Для запроса комментариев вы используете класс 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 вместе с tax_query или meta_query. NКогда «orderby '=> ' meta_value 'использовался при передаче meta_query с отношением OR в WP_Query, которое использовалось для разбиения запроса. Это было исправлено.

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

Сводка

Эти улучшения в запросах заставят WordPress сделать шаг вперед к полной возможности CMS. Возможность использования вложенных запросов означает, что вы можете выводить контент более гибкими и сложными способами. Будет интересно посмотреть, как люди используют их!