Добро пожаловать в финальную часть серии — ну, технически финальной частью будет «Финал серии», но вы поняли идею. В этой части вы познакомитесь с двумя родственными классами: WP_Meta_Query
и WP_Date_Query
.
Без лишних слов, давайте начнем!
Работа со всеми видами метаданных через класс WP_Meta_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
Мы не можем сказать, что это учебник, если мы не делаем пример, верно? На простом примере мы увидим, как мы можем использовать класс 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_Date_Query
Как и 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
класс 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 +, так что спасибо, что вы с нами до конца! В следующей (и последней) части мы расскажем о том, через что мы прошли в последний раз, и закроем серию.
У вас есть что добавить в эту статью? Если это так, не стесняйтесь поделиться своими мыслями в разделе комментариев ниже. И если вам понравилась статья, не забудьте поделиться ею с друзьями!