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

Що таке WP_Comment_Query?

WP_Comment_Query був вперше представлений в WordPress версії 3.1, і служить для створення запитів, пов’язаних з коментарями. Всі результати запитів клас отримує з двох таблиць бази даних: wp_comments і wp_commentmeta.

Приблизно так буде виглядати шаблон циклу при запиті коментарів з допомогою класу WP_Comment_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 коментаря (замість дати публікації). Ось що вам потрібно буде зробити:

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 ‘

    ‘;
    // Запускаємо цикл по коментарям.
    foreach( $comments as $comment ) {
    echo ‘

  • ‘. $comment->comment_content . ‘
  • ‘;
    }
    // Завершення виведення коментарів.
    echo ‘

‘;
} else {
// Виводимо повідомлення про те, що коментарі відсутні.
echo ‘

‘. __( ‘Автор запису не публікував коментарів.’, ‘tutsplus’ ) . ‘

‘;
}
?>

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

На завершення

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

Поділіться своїми думками зі мною та іншими читачами. І якщо вам сподобалася стаття, обов’язково поділіться нею з друзями.

Побачимося в наступних статтях цієї серії!

Переклад статті «Mastering WP_Comment_Query» був підготовлений дружною командою проекту Сайтостроение від А до Я.