Від автора: у цьому уроці ми розглянемо клас WP_Comment_Query. Вперше даний клас з’явився у версії 3.1 і виконував майже всю брудну роботу по витягуванню коментарів з бази даних WordPress. Клас працює з двома таблицями wp_comments і wp_commentmeta.
Нижче показаний шаблон запиту з класу WP_Comment_Query:
query( $args );
if ( $comments ) {
// Тут можете як завгодно обробити кожен коментар.
}
} 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 коментарів (а не за датою). Ось як це можна зробити:
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 ‘
‘. __( ‘The post author ставимося\’t post any comments.’, ‘tutsplus’ ) . ‘
‘;
}
?>
Підказка: Якщо ви хочете використовувати для створення запитів GUI, скористайтесь WP_Comment_Query Generator.
Висновок
Як я вже казав, наша серія підходить до кінця. У наступній частині ми розберемо відразу два класи WP_Meta_Query і WP_Date_Query. Хотіли б що-небудь додати до цієї статті? Залишайте свої думки в коментарях. І не забудьте поділитися статтею з друзями, якщо вона вам сподобалася.