Вивчення WP_Comment_Query

20

Від автора: у цьому уроці ми розглянемо клас 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 ‘

  • ‘;
    // Проходимся по ним циклом.
    foreach( $comments as $comment ) {
    echo ‘
  • ‘. $comment->comment_content . ‘
  • ‘;
    }
    // Закриваємо список.
    echo ‘

‘;
} else {
// Повідомлення якщо коментарі не знайдено.
echo ‘

‘. __( ‘The post author ставимося\’t post any comments.’, ‘tutsplus’ ) . ‘

‘;
}
?>

Підказка: Якщо ви хочете використовувати для створення запитів GUI, скористайтесь WP_Comment_Query Generator.

Висновок

Як я вже казав, наша серія підходить до кінця. У наступній частині ми розберемо відразу два класи WP_Meta_Query і WP_Date_Query. Хотіли б що-небудь додати до цієї статті? Залишайте свої думки в коментарях. І не забудьте поділитися статтею з друзями, якщо вона вам сподобалася.