get_comments() WP 2.7.0

Отримує коментарі за вказаними параметрами у вигляді масиву даних.

Працює на основі:
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() .


author_email
(рядок)
email автора коментаря, коментарі якого потрібно отримати.


За замовчуванням: ”

author__in
(число/масив)
ID автора, коментарі якого потрібно отримати. Можна вказати ID кількох авторів у масиві. У запиті використовується поле
user_id .


За замовчуванням: ”

author__not_in
(число/масив)
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()

post_author
(число)
ID автора запису, коментарі яких потрібно отримати. У запиті використовується поле
post_author із таблиці записів
wp_posts .


За замовчуванням: ”

post_author__in
(число/масив)
ID авторів записів, коментарі яких потрібно отримати. Можна вказати ID кількох авторів у масиві.

post_author__not_in
(число/масив)
ID авторів записів, коментарі яких НЕ потрібно отримувати. Можна вказати ID кількох авторів у масиві.


За замовчуванням: ”

post_id
(число)
ID посту/сторінки. Якщо вказати цей параметр, то функція поверне лише коментарі до вказаного поста або сторінки.


За замовчуванням: ”

post__in
(масив)
ID записів, коментарі яких потрібно отримати.


За замовчуванням: ”

post__not_in
(масив)
ID записів, коментарі яких потрібно виключити.


За замовчуванням: ”

post_status
(рядок)
Статус запису. Будуть отримані коментарі записів, які мають цей статус. Наприклад
publish.


За замовчуванням: ”

post_type
(рядок)
Тип запису. Будуть отримані коментарі записів, що мають цей тип. Наприклад
page.


За замовчуванням: ”

post_name
(рядок)
Назва запису (ярлик запису), коментарі якого потрібно отримати.


За замовчуванням: ”

post_parent
(число)
ID запису, коментарі дочірніх записів якого потрібно отримати.


За замовчуванням: ”
Умови пошуку, за якими будуть отримані коментарі.


За замовчуванням: ”

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 .

Приклади

0

#1 Виведе всі коментарі до посту 15 (включаючи спам та не схвалені).

$comments = get_comments('post_id=15');
foreach( $comments as $comment ){
	echo($comment->comment_author);
}
0

#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 );
}
0

#3 Виведемо на екран кількість коментарів посту.

$ comments = get_comments ([
	'post_id' => 1, // використовуйте post_id, а не post_ID
	'count' => true // повертає лише count
]);

echo $comments;
0

#4 Виведемо кількість коментарів користувача.

$ args = array (
	'user_id' => 1,
	'count' => true
);
$comments = get_comments( $args );
echo $comments
0

#5 Виведемо коментарі користувача.

$ args = array (
	'user_id' => 1, // ID користувача

);
$comments = get_comments( $args );
foreach( $comments as $comment ){
	echo( $comment->comment_author . '<br />' . $comment->comment_content );
}
0

#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 );
}
0

#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

*/
0

#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
*/
0

#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
*/
0

#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() WP 6.0.2

function get_comments( $args = '' ) {
	$query = новий WP_Comment_Query;
	return $query->query( $args );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *