Знакомство с WP_Comment_Query

В предыдущей статье мы рассказывали вам о WP_User_Query, а сегодня будем знакомиться с WP_Comment_Query.

Что такое WP_Comment_Query?

WP_Comment_Query был впервые представлен в WordPress версии 3.1, и служит для создания запросов, связанных с комментариями. Все результаты запросов класс получает из двух таблиц базы данных: wp_comments и wp_commentmeta.

Примерно так будет выглядеть шаблон цикла при запросе комментариев с помощью класса WP_Comment_Query:

<?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_Query, где представлено свыше 30 свойств (25 из них являются эквивалентами условных тегов), для класса WP_Comment_Query предусмотрено всего 5 свойств:

  • $request: строка с SQL-запросом;
  • $meta_query: массив, предназначенный для создания «запроса метаданных» при помощи класса WP_Meta_Query;
  • $date_query: массив, предназначенный для создания «запроса даты» при помощи класса WP_Date_Query;
  • $query_vars: массив с переменными для запроса;
  • $comments: массив с комментариями, полученными с помощью запроса.

Единственный метод WP_Comment_Query

Метод query() выполняет запрос при использовании параметров, с которыми мы познакомимся дальше в статье. Но давайте для начала посмотрим, что мы получаем в виде массива при использовании этого метода:

  • comment_ID: ID комментария;
  • comment_post_ID: ID записи, к которой был написан комментарий;
  • comment_author: имя автора комментария;
  • comment_author_email: адрес электронной почты автора комментария;
  • comment_author_url: URL сайта автора комментария;
  • comment_author_IP: IP-адрес автора комментария;
  • comment_date: дата комментария;
  • comment_date_gmt: дата комментария в формате GMT;
  • comment_content: содержимое комментария;
  • comment_karma: пустое поле базы данных для каждого комментария, используется при работе плагинов и для хранения значения рейтинга комментария;
  • comment_approved: статус одобренного комментария;
  • comment_agent: браузер пользователя;
  • comment_type: тип комментария: пингтрэк или пингбэк;
  • comment_parent: ID родительского комментария для вложенных комментариев. Если это самый верхний комментарий, значением будет 0;
  • user_id: 0 – если автор комментария не зарегистрирован на сайте. Иначе будет использоваться ID зарегистрированного пользователя.

Теперь давайте рассмотрим параметры класса WP_Comment_Query.

Параметры класса WP_Comment_Query

С классом WP_Comment_Query мы можем использовать 34 параметра, но не стоит бояться, так как большинство из них вы знаете.

  • author_email (string): адрес электронной почты автора комментария;
  • 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): возвращать только те комментарии, показатель "кармы" которых соответствует запросу;
  • number (integer): максимальное количество комментариев, которое вы хотите получить;
  • offset (integer): количество комментариев, которое следует пропустить в самом начале;
  • orderby (string or array): статус комментария или массив со статусами, по которым будут выстраиваться результаты запроса. Принимаются все ключи, полученные из метода query(), а также 'meta_value', 'meta_value_num', значения $meta_key, FALSE, пустого массива или 'none'. Три последних варианта исключают возможность использовать команду ORDER BY в запросе;
  • 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 или 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_Meta_Query. По умолчанию: NULL.

Примечание: стандартные значения всех параметров пусты до тех пор, пока вы не установите что-то иное.

Наглядный пример работы WP_Comment_Query

Предположим, что вам нужно вывести комментарии, оставленные автором записи, и отсортировать их по ID комментария (вместо даты публикации). Вот что вам нужно будет сделать:

<?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">' . __( 'Автор записи не публиковал комментариев.', 'tutsplus' ) . '</p>';

}

?>

Совет: если вы хотите создавать запросы с помощью графического интерфейса, то можно воспользоваться специальным генератором WP_Comment_Query Generator.

В завершение

Мы потихоньку подходим к концу нашей серии, и в следующей статье я хочу познакомить вас сразу с двумя классами: WP_Meta_Query и WP_Date_Query.

Поделитесь своими мыслями со мной и другими читателями. И если вам понравилась статья, обязательно поделитесь ей с друзьями.

Увидимся в последующих статьях этой серии!

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

09 декабря 2015 в 12:28
Материалы по теме
{"url":"http://www.fastvps.ru/", "src":"/images/advbanners/fastvps.png", "alt":"Хостинг Fastvps.ru. Наш выбор!"}
Заработок