Знакомство с WP_Meta_Query и WP_Date_Query

Сегодня мы хотим познакомить вас с двумя родственными классами: WP_Meta_Query и WP_Date_Query.

Класс WP_Meta_Query – это второстепенный класс, который «помогает» WP_Query выполнять запросы, связанные с метаданными.

В базе данных WordPress хранит три типа метаданных: записи, пользователя и комментариев. В предыдущих руководствах мы видели, что можно запускать запросы на выборку метаданных внутри запроса, который мы осуществляем с помощью классов WP_User_Query и WP_Comment_Query (при помощи параметра ‘meta_query’). На самом деле для этого используется WP_Meta_Query.

При помощи класса WP_Meta_Query вы можете получить SQL-команды для запросов, связанных с метаданными. Этот класс сам по себе не получает результаты из проведенного запроса, и вместо этого подготавливает SQL-команды, которые вы сможете использовать где-либо еще.

Пример использования класса WP_Meta_Query

Предположим, что вам нужно создать специальный плагин, с помощью которого вы будете выводить записи с одинаковыми значениями мета-ключа. Или с любым другим одинаковым значением поля метаданных. И в результате вы хотите получить SQL— запрос, чтобы динамически использовать его в разных блоках кода. Чтобы получить нужный SQL— запрос, вам понадобится следующий код:

<?php
 
global $wpdb;
 
$my_meta_query_args = array(
    'relation' => 'OR',
    array(
        'meta_key' => 'Some_Key',
        'meta_value' => 'Some_Value',
        'compare' => '='
    ),
    array(
        'meta_key' => 'Some_Other_Key',
        'meta_value' => 'Some_Other_Value',
        'compare' => '='
    )
);
 
$my_meta_query = new WP_Meta_Query;
 
$my_meta_query->parse_query_vars( $my_meta_query_args );
 
$my_meta_query_sql = $my_meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
 
?>

Переменная $my_meta_sql содержит в себе SQL-команды вашего запроса, и вы можете повторно использовать его в любом блоке кода на сайте.

Проводим запросы по датам при помощи класса WP_Date_Query

WP_Date_Query – вспомогательный класс для WP_Query, WP_User_Query и WP_Comment_Query. Впервые он появился в WordPress версии 3.7. Тогда он не поддерживал WP_User_Query, но с выходом версии 4.1 у нас появилась возможность выполнять запрос к таблице users (к колонке user_registered).

Класс WP_Date_Query позволяет нам осуществлять запросы к полям даты таблиц posts, comments и users. Как и WP_Meta_Query, этот вспомогательный класс также позволяет получить подготовленный SQL-код, который можно использовать в запросах, связанных с датами.

Пример использования класса WP_Date_Query

Давайте представим, что нам нужно запросить комментарии, которые были сделаны в течение текущего месяца до обеда.

Нужный SQL-код можно получить следующим образом:

<?php
 
$my_date_query_args = array(
    array(
        'month' => date( 'n' ),
    ),
    array(
        'before' => 'noon'
    ),
    'relation' => 'AND'
);
 
$my_date_query = new WP_Date_Query( $my_date_query_args, 'comment_date' );
 
$my_date_query_sql = $my_date_query->get_sql();
 
?>

Здесь важно учесть, что мы можем использовать PHP-формат относительных дат, который может очень пригодиться.

В завершение

Мы завершаем наше длительное и, надеюсь, увлекательное путешествие по миру класса WP_Query. В следующей статье мы подытожим все то, чему научились в этой серии.

Возможно, у вас есть, что добавить к этой статье? Также не забудьте поделиться этим полезным материалом с друзьями!

Перевод статьи “Mastering WP_Meta_Query & WP_Date_Query” был подготовлен дружной командой проекта Сайтостроение от А до Я.