От автора: в этом уроке мы рассмотрим два родственных класса WP_Meta_Query и WP_Date_Query в WordPress. Меньше слов, перейдем сразу к делу!
Работа со всеми типами мета данных в классе WP_Meta_Query
Класс WP_Meta_Query – класс хелпер, помогает классу WP_Query создавать запросы по мета данным. Как вам известно, в базе данных WordPress хранится три типа мета данных: мета данные постов, пользовательские мета данные и данные комментариев. В предыдущих уроках мы убедились в том, что внутри запросов в классах WP_Query, WP_User_Query и WP_Comment_Query можно создавать мета запросы (с помощью параметра ‘meta_query’). На самом деле класс WP_Meta_Query как раз и запускается, когда мы выполняем эти запросы.
Выходит, с помощью WP_Meta_Query можно получить SQL-запросы. В данный класс не возвращается результат выполнения запросов, он подготавливает SQL команды, которые вы можете использовать в других местах.
Примеры использования WP_Meta_Query
Без примеров эту статью нельзя назвать уроком, ведь так? На простом примере ниже я покажу, как использовать класс WP_Meta_Query в реальных ситуациях. (Получение SQL запроса из мета запроса очень специфичная вещь, но я постараюсь подобрать понятный пример).
Скажем, вы хотите создать плагин «похожие посты» на своем сайте. Плагин будет отображать список постов с одинаковыми мета данными по определенному ключу. И вместо создания мета запроса в объекте WP_Query, вы вытягиваете SQL запрос, чтобы потом динамически его использовать в отдельных кусках кода. Ниже показано, как это сделать:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?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 запрос, который можно теперь использовать где угодно.
date запросы и класс WP_Date_Query
Как и WP_Meta_Query, класс WP_Date_Query является хелпером для WP_Query, WP_User_Query и WP_Comment_Query. Этот класс впервые появился в WordPress v.3.7. На тот момент данный класс не поддерживал WP_User_Query. И только начиная с версии 4.1 стало возможным создавать запросы внутри пользовательских таблиц (поле user_registered).
Подобно классу WP_Meta_Query и его способности запрашивать ключи и значения, с помощью класса WP_Date_Query можно получить данные из поста, комментария и таблицы пользователей. И также, как и с WP_Meta_Query, данный класс позволяет подготовить SQL-запрос.
Пример использования WP_Date_Query
Чтобы полностью понять принципа работы данного класса, разберем пример. Пример будет довольно специфичным, но без него не обойтись. Представим, что по какой-то причине нам необходимо вытащить все комментарии за прошедший месяц, добавленные до 12 дня. Ниже показан код этого странного запроса:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?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, очень полезная вещь. Совет: у Christian Bruckner написана замечательная статья о принципе работы WP_Date_Query на сайте great post on MarketPress.com. Она немного устарела (написана до выхода WordPress 4.1), но она написана понятным языком и легко читается.
Заключение
Два наших класса хелпера завершают долгое путешествие по классу WP_Query. Эта серия уроков была одной из самых длинных на сайте Tuts+. Спасибо, что дошли с нами до конца! В следующей (и последней) части вы закрепим пройденные навыки. Хотите что-нибудь добавить? Если так, не стесняйтесь оставлять свои мысли в комментариях. Если понравилась статья, не забудьте поделиться ей со своими друзьями!
Автор: Barış Ünver
Источник: //code.tutsplus.com/
Редакция: Команда webformyself.