Совершенствование запросов в современных версиях WordPress

За прошедший год много статей было посвящено улучшениям и нововведениям в 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 );

?>

Такой запрос осуществляет поиск по таксономиям 'speed' и 'meal', и выдает записи с соответствующими терминами 'quick' и 'breakfast'. Но что если нам нужно создать более комплексный запрос? Предположим, вам нужен рецепт быстрого завтрака, а также рецепты традиционных полдников.

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

Конечно, можно изменить эти запросы, указав определенные термины таксономий и значения.

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

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

Синтаксис работает одинаково в запросах и к датам, и к метаданным. В мета-запросах вы заменяете tax_query на meta_query и используете 'key' и 'value' в качестве значений. В запросах к датам вы заменяете tax_query на date_query и используете параметры дат, представленные в кодексе WordPress.

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

Чтобы выполнять запросы к комментариям, вместо класса WP_Query следует использовать WP_Comment_Query. Этот класс приобрел 8 новых параметров:

  • 'author__in': идентифицирует автора комментария (или массив авторов);
  • 'author__not_in': исключить комментарий автора по ID (или массива авторов);
  • 'post_author__in': идентифицирует автора (или массив авторов) записи, к которой был оставлен комментарий;
  • 'post_author__not_in': исключает комментарии, оставленные к записям конкретного автора или массива авторов;
  • 'comment__in': комментарии с конкретным ID или массивом ID;
  • 'comment__not_in': исключает комментарии с конкретным ID или массивом ID;
  • 'post__in': дочерние комментарии, оставленные к записи или массиву записей (используется ID записи);
  • 'post__not_in': исключить дочерние комментарии, оставленные к записи или массиву записей (используется ID записи).

Здесь в качестве значений используются ID автора, комментария или записи.

Учтите, что класс WP_Comment_Query теперь также поддерживает вложенные запросы.

Исправления

  • Исправлен баг, который вызывал ошибку запроса, если в нем с date_query использовались tax_query или meta_query;
  • Исправлена ошибка запроса ‘orderby' => 'meta_value’ при передаче в WP_Query 'meta_query' с выражением OR.

Более подробно обо всех изменениях можно узнать на сайте WordPress.

В завершение

Возможность использовать вложенные запросы означает, что вы теперь можете получать контент более удобными методами. Было бы интересно увидеть примеры того, как вы будете использовать эти запросы!

Перевод статьи “Query Improvements in the Latest Versions of WordPress” был подготовлен дружной командой проекта Сайтостроение от А до Я.

11 декабря 2015 в 14:05
Материалы по теме
{"url":"http://www.fastvps.ru/", "src":"/images/advbanners/fastvps.png", "alt":"Хостинг Fastvps.ru. Наш выбор!"}
Заработок