В попередній статті ми розповідали вам про 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 ‘
- ‘;
- ‘. $comment->comment_content . ‘
// Запускаємо цикл по коментарям.
foreach( $comments as $comment ) {
echo ‘
‘;
}
// Завершення виведення коментарів.
echo ‘
‘;
} else {
// Виводимо повідомлення про те, що коментарі відсутні.
echo ‘
‘. __( ‘Автор запису не публікував коментарів.’, ‘tutsplus’ ) . ‘
‘;
}
?>
Порада: якщо ви хочете створювати запити за допомогою графічного інтерфейсу, то можна скористатися спеціальним генератором WP_Comment_Query Generator.
На завершення
Ми потихеньку підходимо до кінця нашої серії, і в наступній статті я хочу познайомити вас з двома класами: WP_Meta_Query і WP_Date_Query.
Поділіться своїми думками зі мною та іншими читачами. І якщо вам сподобалася стаття, обов’язково поділіться нею з друзями.
Побачимося в наступних статтях цієї серії!
Переклад статті «Mastering WP_Comment_Query» був підготовлений дружною командою проекту Сайтостроение від А до Я.