get_comments()
Отримує коментарі за вказаними параметрами у вигляді масиву даних.
WP_Comment_Query()
Хуків немає.
Повертає
WP_Comment[]|int[]|int
. Масив об’єктів коментарів:
Array ( [0] => stdClass Object ( [comment_ID] => 7999 [comment_post_ID] => 4896 [comment_author] => Kama [comment_author_email] => [email protected] [comment_author_url] => [comment_author_IP] => 65.229.196.81 [comment_date] => 2014-09-08 13:16:09 [comment_date_gmt] => 2014-09-08 09:16:09 [comment_content] => текст коментаря [comment_karma] => 0 [comment_approved] => 1 [comment_agent] => [comment_type] => [comment_parent] => 7989 [user_id] => 1 [comment_subscribe] => N ) [1] => stdClass Object ( Аналогічні дані, як в об'єкті 0 ) )
Або число, коли вказано отримати кільк. коментарів.
Шаблон використання
$ args = array ( 'author_email' => '', 'author__in' => '', 'author__not_in' => '', 'include_unapproved' => '', 'fields' => '', 'comment__in' => '', 'comment__not_in' => '', 'karma' => '', 'number' => '', 'offset' => '', 'no_found_rows' => true, 'orderby' => '', 'order' => 'DESC', 'parent' => '', 'post_author__in' => '', 'post_author__not_in' => '', 'post_id' => 0, 'post__in' => '', 'post__not_in' => '', 'post_author' => '', 'post_name' => '', 'post_parent' => '', 'post_status' => '', 'post_type' => '', 'status' => 'all', 'type' => '', 'type__in' => '', 'type__not_in' => '', 'user_id' => '', 'search' => '', 'count' => false, 'meta_key' => '', 'meta_value' => '', 'meta_query' => '', 'date_query' => null, // See WP_Date_Query 'hierarchical' => false, 'update_comment_meta_cache' => true, 'update_comment_post_cache' => false, ); if( $comments = get_comments( $args ) ){ foreach( $comments as $comment ){ // дії } }
Використання
$comments = get_comments( $args ); foreach( $comments as $comment ){ // Висновок }
Аргументи параметра $args
WP_Comment_Query ::__construct() .
-
email автора коментаря, коментарі якого потрібно отримати.
За замовчуванням: ” -
ID автора, коментарі якого потрібно отримати. Можна вказати ID кількох авторів у масиві. У запиті використовується поле
user_id .
За замовчуванням: ” -
ID автора, коментарі якого потрібно виключити. Можна вказати ID кількох авторів у масиві. У запиті використовується поле
user_id .
За замовчуванням: ” -
comment__in
(масив/число) -
ID коментарів, які потрібно отримати.
За замовчуванням: ” -
comment__not_in
(масив/число) -
ID коментарів, які потрібно виключити.
За замовчуванням: ” -
count
(true/false) -
При true функція поверне загальну кількість коментарів. При false масив об’єктів коментарів.
Типово: false -
include_unapproved
(масив) -
Масив ID або email користувачів, несхвалені коментарі яких будуть включені в результат, будь-який статус би вказаний у параметрі
status
.
За замовчуванням: ” -
karma
(число) -
Отримати коментарі із зазначеним числом karma.
За замовчуванням: ” -
parent
(число) -
ID коментаря, дочірні коментарі якого потрібно отримати. Вказуємо ID та запит буде будуватися по полю
comment_parent=указанное число
.
Якщо увімкнено параметр
hierarchical
, то в результат також будуть додані вкладені коментарі (не тільки ті, що вказані в цьому параметрі)
За замовчуванням: ” -
parent__in
(масив) -
Масив ID коментарів, дочірні коментарі яких потрібно отримати. Теж як і
parent , лише вказуються відразу кілька ID.
За замовчуванням: array() -
parent__not_in
(масив) -
ID коментарів, дочірні коментарі яких не потрібно отримувати. Протилежність параметра
parent__in .
За замовчуванням: array() -
ID автора запису, коментарі яких потрібно отримати. У запиті використовується поле
post_author із таблиці записів
wp_posts .
За замовчуванням: ” - ID авторів записів, коментарі яких потрібно отримати. Можна вказати ID кількох авторів у масиві.
-
ID авторів записів, коментарі яких НЕ потрібно отримувати. Можна вказати ID кількох авторів у масиві.
За замовчуванням: ” -
post_id
(число) -
ID посту/сторінки. Якщо вказати цей параметр, то функція поверне лише коментарі до вказаного поста або сторінки.
За замовчуванням: ” -
post__in
(масив) -
ID записів, коментарі яких потрібно отримати.
За замовчуванням: ” -
post__not_in
(масив) -
ID записів, коментарі яких потрібно виключити.
За замовчуванням: ” -
post_status
(рядок) -
Статус запису. Будуть отримані коментарі записів, які мають цей статус. Наприклад
publish
.
За замовчуванням: ” -
post_type
(рядок) -
Тип запису. Будуть отримані коментарі записів, що мають цей тип. Наприклад
page
.
За замовчуванням: ” -
post_name
(рядок) -
Назва запису (ярлик запису), коментарі якого потрібно отримати.
За замовчуванням: ” -
post_parent
(число) -
ID запису, коментарі дочірніх записів якого потрібно отримати.
За замовчуванням: ” -
search
(рядок) -
Умови пошуку, за якими будуть отримані коментарі.
За замовчуванням: ” -
status
(рядок) Поверне коментарі із цим статусом. Може приймати параметри:
hold
– не схвалені коментаріapprove
– схвалені коментаріspam
– спамtrash
– кошикpost-trashed
– коментарі записів із кошика
За замовчуванням: ”
-
orderby
(рядок/масив) Поле з таблиці БД яким потрібно відсортувати висновок. Можна вказувати кілька полів через пробіл або кому. Можна вказувати метадані коментарі:
Поля основної таблиці:
- comment_agent
- comment_approved
- comment_author
- comment_author_email
- comment_author_IP
- comment_author_url
- comment_content
- comment_date
- comment_date_gmt
- comment_ID
- comment_karma
- comment_parent
- comment_post_ID
- comment_type
- user_id
Метаполі. При цьому має бути встановлений параметр $meta_key:
- meta_value
- meta_value_num
Щоб сортувати за певним метаполем із параметра $meta_query , задайте індекс для запиту $meta_query , а тут впишіть цей індекс.
Можна вказати кілька полів у масиві. При цьому в індексі потрібно вказати назву поля, а в значенні напрямок сортування. Наприклад:
array('comment_date'=>'ASC', 'comment_karma'=>'DESC')
Докладніше читайте тут .Можна вказати false, array() або ‘none’, щоб вимкнути частину запиту ORDER BY.
За замовчуванням: ‘comment_date_gmt’
-
order
(рядок) -
Порядок сортування:
ASC
(123)
DESC
(321). Ігнорується якщо в
orderby вказаний асоціативний масив.
За замовчуванням: DESC -
number
(число) -
Обмеження коментарів, що виводяться (вкажіть макс. число). Залишіть порожнім, щоб отримати усі коментарі.
За замовчуванням: ” -
offset
(число) -
Кількість коментарів, які потрібно пропустити від початку (згори результату). Використовується для створення SQL LIMIT частини запиту. Застосовується для створення пагінації.
За замовчуванням: 0 -
no_found_rows
(логічний) -
Чи потрібно вимкнути
SQL_CALC_FOUND_ROWS у запиті.
Типово: true -
meta_key
(рядок) -
Отримати коментарі із зазначеним мета ключем.
За замовчуванням: ” -
meta_value
(рядок) -
Отримати коментарі із зазначеним значенням метаполя. Потрібно вказати параметр
meta_key
.
За замовчуванням: ” -
meta_query
(масив) -
Для створення складних запитів метаданим. Замінює параметри
meta_key та
meta_value . Працює також як
meta_query у
WP_Query .
За замовчуванням: ” -
date_query
(масив) -
Фільтр за датою коментарів. Дивіться
WP_Date_Query
Типово: null -
fields
(рядок) -
Поля, які будуть повернуті. Можливо
ids
– отримає лише ID коментарів, чи порожньо – отримає всі поля.
За замовчуванням: ” -
type
(рядок/масив) -
Тип коментарів, які потрібно отримати. Можна вказати кілька типів у масиві. Може бути:
comment
(рівно
''
),
pings
(включає pingback і trackback), або будь-який інший тип.
За замовчуванням: ” (comment) -
type__in
(рядок/масив) -
Отримати тільки коментарі із зазначеним типом.
За замовчуванням: ” -
type__not_in
(рядок/масив) -
Отримати всі коментарі, крім коментарів із зазначеним типом.
За замовчуванням: ” -
user_id
(число) -
Поверне лише коментарі вказаного користувача. Аналог параметра
author__in .
За замовчуванням: ” -
hierarchical
(рядок/логічний) Чи потрібно включити дочірні коментарі до результату. Можна вказати такі параметри:
'threaded'
— поверне дерево з усіма дочірніми коментарями. Дочірні коментарі будуть додані як $children першого (найвищого) об’єкта WP_Comment .'flat'
— поверне «плоский» масив, коментарі та їхні дочірні коментарі.false
— дочірні коментарі не будуть включені до результату.
Параметр ігнорується (встановлюється false), коли $fields = ‘ids’ або ‘counts’.
Типово: false
-
update_comment_meta_cache
(логічний) -
Чи потрібно скинути мета-кеш для отриманих коментарів?
Типово: true -
update_comment_post_cache
(логічний) -
Чи потрібно скинути мета-кеш для записів (постів) коментарів?
Типово: false
При використанні параметрів типу post_* запит будуватиметься на базі таблиці записів wp_posts . І якщо, наприклад, вказати post_author__in , то будуть отримані всі коментарі записів, авторами яких є вказані користувачі.
А от якщо вказати author__in , то будуть отримані окремі коментарі зазначених користувачів.
Додано у версії 4.4.0. Сортування по полю comment__in . Параметри: $update_comment_meta_cache , $no_found_rows , $hierarchical , $update_comment_post_cache , $parent__in , $parent__not_in .
Приклади
#1 Виведе всі коментарі до посту 15 (включаючи спам та не схвалені).
$comments = get_comments('post_id=15'); foreach( $comments as $comment ){ echo($comment->comment_author); }
#2 Покаже 5 не схвалених коментарів.
$ comments = get_comments ([ 'status' => 'hold', 'number' => '5', 'post_id' => 1 // правильно post_id, а не post_ID ]); foreach( $comments as $comment ){ echo( $comment->comment_author . '<br />' . $comment->comment_content ); }
#3 Виведемо на екран кількість коментарів посту.
$ comments = get_comments ([ 'post_id' => 1, // використовуйте post_id, а не post_ID 'count' => true // повертає лише count ]); echo $comments;
#4 Виведемо кількість коментарів користувача.
$ args = array ( 'user_id' => 1, 'count' => true ); $comments = get_comments( $args ); echo $comments
#5 Виведемо коментарі користувача.
$ args = array ( 'user_id' => 1, // ID користувача ); $comments = get_comments( $args ); foreach( $comments as $comment ){ echo( $comment->comment_author . '<br />' . $comment->comment_content ); }
#6 Видалимо, що йдуть поспіль, однакові коментарі.
Порівнюємо автора та контент коментаря.
// Отримаємо всі коментарі з пустим аргументом number $all_comments = get_comments( [ 'status' => 'approve', 'number' => '', ]); // масив який міститиме ID дублів коментарів $comment_ids_to_delete = []; foreach( $all_comments as $k => $c ){ $kk = $k-1; // Попередній індекс коментаря у масиві $all_comments $pc = $all_comments[$kk]; // попередній об'єкт коментаря // Якщо автор і контент однакові, додаємо коментар до масиву для видалення if( $pc->comment_author === $c->comment_author && $pc->comment_content === $c->comment_content ) { $comment_ids_to_delete[] = $pc->comment_ID; } } // Видаляємо коментарі по ID foreach( $comment_ids_to_delete as $comm_id ){ wp_delete_comment( $comm_id ); }
#7 Отримаємо останні коментарі до списку.
Цей код отримує останні 10 коментарів у вигляді списку UL. Де текст коментаря вкорочений до 50 символів і є посиланням на коментар:
$ args = array ( 'number' => 10, 'orderby' => 'comment_date', 'order' => 'DESC', 'type' => '', // тільки коментарі, без пінгів і т.д. ); if( $comments = get_comments( $args ) ){ echo '<ul>'; foreach( $comments as $comment ){ $comm_link = get_comment_link( $comment->comment_ID ); // може бути важкий запит. $comm_short_txt = mb_substr( strip_tags( $comment->comment_content ), 0, 50 ) .'...'; echo '<li>'. $comment->comment_author .': <a rel="nofollow" href="'. $comm_link .'">'. $comm_short_txt .'</a></li>'; } echo '</ul>'; } /* Дані в об'єкті $comment stdClass Object [comment_ID] => 9727 [comment_post_ID] => 477 [comment_author] => Andrew [comment_author_email] => [email protected] [comment_author_url] => [comment_author_IP] => 178.45.177.200 [comment_date] => 2015-22-01 00:27:04 [comment_date_gmt] => 2015-22-28 21:27:04 [comment_content] => текст коментаря [comment_karma] => 0 [comment_approved] => 1 [comment_agent] => Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) [comment_type] => [comment_parent] => 9724 [user_id] => 313 */
#8 Приклад отримання дочірніх коментарів у вигляді дерева
Приклад того, як працює параметр 'hierarchical' => 'threaded'
:
$comments = get_comments([ 'parent' => 22384, 'hierarchical' => 'threaded', ]); /* Отримаємо (деякі поля об'єкта WP_Comment видалені для наочності): Array [22986] => WP_Comment Object [comment_ID] => 22986 [comment_post_ID] => 8342 [comment_author] => camp [comment_date] => 2018-04-11 19:07:08 [comment_content] => Додано. [comment_type] => [comment_parent] => 22430 [populated_children:protected] => 1 [children:protected] => Array [22998] => WP_Comment Object [comment_ID] => 22998 [comment_post_ID] => 8342 [comment_author] => Максим [comment_date] => 2018-04-12 12:15:25 [comment_content] => Працює чудово. Дякую! [comment_type] => [comment_parent] => 22986 [populated_children:protected] => 1 [children:protected] => Array [23035] => WP_Comment Object [comment_ID] => 23035 [comment_post_ID] => 8342 [comment_author] => camp [comment_date] => 2018-04-16 15:36:00 [comment_content] => Дякуємо за зворотний зв'язок! [comment_type] => [comment_parent] => 22998 [children:protected] => [populated_children:protected] => 1 [22982] => WP_Comment Object [comment_ID] => 22982 [comment_post_ID] => 8342 [comment_author] => Максим [comment_date] => 2018-04-11 12:12:00 [comment_content] => > Супер, якби ще запиляти виведення сумарного рейтингу. [comment_type] => [comment_parent] => 22430 [populated_children:protected] => 1 [children:protected] => Array [22985] => WP_Comment Object [comment_ID] => 22985 [comment_post_ID] => 8342 [comment_author] => camp [comment_date] => 2018-04-11 19:05:57 [comment_content] => Привіт. Судячи з питання, тобі не підказати треба, а одразу зробити готове. [comment_type] => [comment_parent] => 22982 [children:protected] => [populated_children:protected] => 1 */
#9 Запит get_comments() через WP_Comment_Query
Такий запит може стати в нагоді, коли нам потрібен доступ до властивостей об’єкта WP_Comment_Query . Наприклад, у властивостях ми можемо переглянути запит, який виходить при вказаних параметрах запиту.
$args = [ 'meta_query' => [ [ 'key' => 'condition', 'value' => 'to_delete' ] ], 'date_query' => [ [ 'before' => '5 місяців тому' ] ], 'orderby' => [ 'comment_ID' => 'DESC' ], 'number' => 100 ]; $query = новий WP_Comment_Query; $comments = $query->query($args); // виведемо запит echo $query->request; /* SELECT wp_comments.comment_ID FROM wp_comments INNER JOIN wp_commentmeta ON ( wp_comments.comment_ID = wp_commentmeta.comment_id ) WHERE ( ( comment_approved = '0' OR comment_approved = '1' ) ) AND ( ( wp_commentmeta.meta_key = 'condition' AND wp_commentmeta.meta_value = 'to_delete' ) ) AND ( wp_comments.comment_date < '2020-02-26 11:48:03' ) GROUP BY wp_comments.comment_ID ORDER BY wp_comments.comment_ID DESC LIMIT 0,100 */
#10 Створення пагінації коментарів
Код нижче показує, як WordPress вивести коментарі користувача з посиланнями пагінації. Для цього потрібно використовувати клас WP_Comment_Query .
Допустимо ми виводимо коментарі на сторінці /user-comments
та номер сторінки пагінації ми ходимо додавати через GET параметр ?pagenum=10
. Виводитимемо по 50 коментарів на сторінці. Для створення HTML коду посилань пагінації будемо використовувати функцію paginate_links() .
$per_page = 50; $pagenum = $_GET['pagenum'] ?? 1; $offset = ($pagenum - 1) * $per_page; $paged_url_patt = home_url( preg_replace( '/[?&].*/', '', $_SERVER['REQUEST_URI'] ) ) .'?pagenum=%#%'; $query = новий WP_Comment_Query; $comments = $query->query( [ 'order' => 'DESC', 'user_id' => $user_id, 'offset' => $offset, 'number' => $per_page, 'no_found_rows' => false, ]); //$total_comments = (int) $query->found_comments; $max_pages = (int) $query->max_num_pages; $paginate_links = paginate_links([ 'base' => $paged_url_patt, 'current' => $pagenum, 'total' => $max_pages ]); echo $paginate_links;
В результаті отримаємо наступний код пагінації:
<a class="prev page-numbers" href="https://wp-kama.dev/profile/comments?pagenum=2">← Раніше</a> <a class="page-numbers" href="https://wp-kama.dev/profile/comments?pagenum=1">1</a> <a class="page-numbers" href="https://wp-kama.dev/profile/comments?pagenum=2">2</a> <span aria-current="page" class="page-numbers current">3</span> <a class="page-numbers" href="https://wp-kama.dev/profile/comments?pagenum=4">4</a> <a class="page-numbers" href="https://wp-kama.dev/profile/comments?pagenum=5">5</a> <span class="page-numbers dots">…</span> <a class="page-numbers" href="https://wp-kama.dev/profile/comments?pagenum=75">75</a> <a class="next page-numbers" href="https://wp-kama.dev/profile/comments?pagenum=4">Далі →</a>
список змін
З версії 2.7.0 | Введено. |
Код get_comments() get comments WP 6.0.2
function get_comments( $args = '' ) { $query = новий WP_Comment_Query; return $query->query( $args ); }