Статьи

Освоение WP_Meta_Query и WP_Date_Query

Добро пожаловать в финальную часть серии — ну, технически финальной частью будет «Финал серии», но вы поняли идею. В этой части вы познакомитесь с двумя родственными классами: WP_Meta_Query и WP_Date_Query .

Без лишних слов, давайте начнем!

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

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

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

Мы не можем сказать, что это учебник, если мы не делаем пример, верно? На простом примере мы увидим, как мы можем использовать класс WP_Meta_Query в реальной жизни. (Конечно, это чрезвычайно специфическая вещь — получить код SQL для запроса, относящегося к мета-методу, но я попытаюсь привести пример из реальной жизни.)

Давайте представим, что вы хотите создать специальный «плагин для связанных записей» для своего собственного веб-сайта, где вы будете перечислять посты, имеющие одинаковое мета-значение для мета-ключа или другое мета-значение для другого мета-ключа. И вместо того, чтобы делать мета-запрос в экземпляре WP_Query , вы хотите получить SQL-код запроса для его динамического использования в отдельных блоках кода. Вот шаги для подготовки этого кода SQL:

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
<?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 для вашего специального запроса, и вы можете использовать этот код SQL где угодно в своем проекте.

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

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

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

Давайте представим, что по какой-то причине нам нужно запросить комментарии, сделанные в текущем месяце и до полудня. ( Пожалуйста, напишите мне комментарий, если вы найдете хороший случай, чтобы получить комментарии, сделанные в текущем месяце и до полудня!) Вот как получить код SQL для этого странного запроса:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
<?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 , которые действительно полезны.

Быстрый совет: Кристиан Брукнер опубликовал на MarketPress.com отличный пост о том, как работает WP_Date_Query . Он немного устарел (потому что он был написан до выхода WordPress 4.1), но он очень хорошо написан и все еще хорошо читается. Не забудьте проверить это.

С этими двумя вспомогательными классами мы заканчиваем долгий путь разбора класса WP_Query . Это был один из самых длинных учебников в истории Tuts +, так что спасибо, что вы с нами до конца! В следующей (и последней) части мы расскажем о том, через что мы прошли в последний раз, и закроем серию.

У вас есть что добавить в эту статью? Если это так, не стесняйтесь поделиться своими мыслями в разделе комментариев ниже. И если вам понравилась статья, не забудьте поделиться ею с друзьями!