От автора: в этом уроке мы разберем класс WP_Comment_Query. Впервые данный класс появился в версии 3.1 и выполнял почти всю грязную работу по вытягиванию комментариев из базы данных WordPress. Класс работает с двумя таблицами wp_comments и wp_commentmeta.
Ниже показан шаблон запроса из класса WP_Comment_Query:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $args = array( // аргументы для запроса. ); $comments_query = new WP_Comment_Query; $comments = $comments_query->query( $args ); if ( $comments ) { foreach ( $comments as $comment ) { // Тут можете как угодно обработать каждый комментарий. } } else { // На случай отсутствия комментариев напишите сообщение. } ?> |
Легко, не правда ли? Чуть позже рассмотрим пример, а пока что заглянем под капот.
Свойства и методы класса WP_Comment_Query
Так как в классе очень много свойств (публичные переменные класса) и методов (публичные функции), я разобью их все на две мини секции.
Свойства WP_Comment_Query
В отличие от класса WP_Query, который насчитывает больше 30 свойств (25 из них эквиваленты условных комментариев), в WP_Comment_Query всего 5 свойств:
$request: Строка с SQL-запросом.
$meta_query: массив для создания «мета запроса» с помощью класса WP_Meta_Query.
$date_query: массив для создания «date-запроса» с помощью класса WP_Date_Query.
$query_vars: массив с переменными для запроса.
$comments: массив полученных комментариев.
Единственный метод WP_Comment_Query
Все верно, в классе WP_Comment_Query всего один метод query(). Метод query() выполняет запрос в базу данных. В качестве аргумента указываются параметры, их мы рассмотрим чуть ниже. А сейчас рассмотрим, что же мы получаем после выполнения метода в наш массив:
comment_ID: ID комментария.
comment_post_ID: ID поста.
comment_author: Имя автора комментария.
comment_author_email: email адрес автора комментария.
comment_author_url: адрес сайта автора комментария.
comment_author_IP: IP-адрес комментария.
comment_date: дата комментария.
comment_date_gmt: дата комментария в GMT формате.
comment_content: текст комментария.
comment_karma: неиспользуемые поля для каждого комментария —нужны для различных плагинов.
comment_approved: Статус проверки комментария.
comment_agent: браузер автора комментария.
comment_type: тип комментария pingback или trackback.
comment_parent: Ответы на комментарии, ID родительского комментария. Если комментарий верхнего уровня, то значение будет 0.
user_id: 0 если автор не зарегистрировался на сайте или ID пользователя сайта.
А вот теперь рассмотрим параметры класса WP_Comment_Query.
Параметры WP_Comment_Query
Есть 34 параметра, только не пугайтесь. По их именам можно понять, зачем они нужны.
author_email (string): email адрес автора комментария.
author__in (array): ID автора для запроса.
author__not_in (array): ID автора для исключения из запроса.
post_author__in (array): То же самое что author__in.
post_author__not_in (array): То же самое что author__not_in.
include_unapproved (array): массив ID пользователей или email адресов, чьи комментарии должны быть вытянуты в независимости от статуса.
fields (string): Поля комментариев. Принимается только поле ‘id’, используется для получения ID комментария.
comment__in (array): ID комментариев для запроса.
comment__not_in (array): ID комментариев для исключения из запроса.
karma (integer): «карма» используется для поиска похожих комментариев. (Вспомните comment_karma из верхней главы)
number (integer): максимальное число возвращаемых комментариев.
offset (integer): количество комментариев в запросе.
orderby (string or array): статус комментария массив статусов для результата запроса. Принимает все ключи возвращенные методом query(), а также ‘meta_value’, ‘meta_value_num’, значение $meta_key, FALSE, пустой массив или ‘none’. (Последние три отключают сортировку в запросе.)
order (string): Сортировка полученных комментариев—’ASC’ по возрастанию или ‘DESC’ по убыванию. (По умолчанию: ‘DESC’)
parent (integer): ID родительского комментария для дочерних.
post_id (integer): ID поста для полученных комментариев. (По умолчанию: 0)
post__in (array): ID постов для включения их в результат запроса.
post__not_in (array): ID постов для исключения их из результата запроса.
post_author (integer): ID автора поста для ограничения результата.
post_name (string): Заголовок статьи для получения комментариев поста.
post_parent (integer): ID родительского поста для получения его комментариев.
post_type (string): Тип поста.
post_status (string): Статус поста.
status (string): Статус комментария. Принимаются ‘hold’, ‘approve’, ‘all’ или пользовательский статус. (По умолчанию: ‘all’)
type (string or array): Тип комментария или массив типов. Принимается ‘comment’, ‘pings’ (pingbacks и trackbacks) или пользовательский тип.
type__in (array): Типы комментариев для запроса.
type__not_in (array): Типы комментариев для исключения из запроса.
user_id (integer): ID пользователя для поиска комментариев определенного пользователя.
search (string): Поисковое выражение для поиска комментариев.
count (boolean): Возвращает количество комментариев (TRUE) или массив комментариев (FALSE). (По умолчанию: FALSE)
meta_key (string): Пользовательский мета ключ для поиска комментариев.
meta_value (string): Пользовательское мета значение для поиска комментариев.
meta_query (array): Массив выражений класса WP_Meta_Query (о них мы поговорим в следующей статье).
date_query (array): Массив выражений класса WP_Date_Query (в следующей статье). (По умолчанию: NULL)
Заметьте: Значения по умолчанию у всех параметров пустые, если не указано ничего другого.
Пример для понимания принципа работы WP_Comment_Query
Данная статья не была бы полной без примера, так ведь? Так что давайте придумаем простенький сценарий использования данного класса. Вам нужно получить все комментарии автора поста и отсортировать список по ID комментариев (а не по дате). Вот как это можно сделать:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php // Получаем глобальный объект `$wp_query`... global $wp_query; // ...и используем для получения ID автора. $post_author_id = $wp_query->post->post_author; // Устанавливаем аргументы. $args = array ( 'user_id' => $post_author_id, 'orderby' => 'comment_ID' ); // Настраиваем запрос. $my_comment_query = new WP_Comment_Query; $comments = $my_comment_query->query( $args ); // Проверяем комментарии. if ( $comments ) { // Собираем комментарии в список. echo '<ul class="author-comments">'; // Проходимся по ним циклом. foreach( $comments as $comment ) { echo '<li>' . $comment->comment_content . '</li>'; } // Закрываем список. echo '</ul>'; } else { // Сообщение если комментарии не найдены. echo '<p class="no-author-comments">' . __( 'The post author didn\'t post any comments.', 'tutsplus' ) . '</p>'; } ?> |
Подсказка: Если вы хотите использовать для создания запросов GUI, воспользуйтесь WP_Comment_Query Generator.
Заключение
Как я уже говорил, наша серия подходит к концу. В следующей части мы разберем сразу два класса WP_Meta_Query и WP_Date_Query. Хотели бы что-нибудь добавить к этой статье? Оставляйте свои мысли в комментариях. И не забудьте поделиться статьей с друзьями, если она вам понравилась.
Автор: Barış Ünver
Источник: //code.tutsplus.com/
Редакция: Команда webformyself.