Функція для виведення останніх коментарів

Почну з того, що коментарі WordPress можна отримати з бази даних за допомогою функції get_comments() . Ось приклад з опису функції:

# Отримаємо останні коментарі списком

Цей код отримує останні 10 коментарів у вигляді списку UL. Де текст коментаря вкорочений до 50 символів і є посиланням на коментар:

$ args = array (
	'number' => 10,
	'orderby' => 'comment_date',
	'order' => 'DESC',
	'status' => 'approve',
	'type' => 'comment', // тільки коментарі, без пінгів і т.д.
);

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) Gecko/20100101 Firefox/36.0
	[comment_type] =>
	[comment_parent] => 9724
	[user_id] => 313
)
*/

Змініть код під себе. Якщо з якихось причин такий варіант не підходить, то все, що нижче якраз для вас.

Спеціальна функція для виведення останніх коментарів

Вивести останні коментарі також можна створивши свій запит до Бази даних:

/**
 * Функція для виведення останніх коментарів у WordPress.
 * ver: 0.2
 */
function kama_recent_comments( $args = array() ){
	Global $wpdb;

	$def = array(
		'limit' => 10 // скільки коментів виводити.
		'ex' => 45, / / ​​n символів. Обрізання тексту коментарів.
		'term' => '', // id категорій/міток. Включити(5,12,35) або виключити(-5,-12,-35) категорії. По дефолту – з усіх категорій.
		'gravatar' => '', // Розмір іконки в px. Показувати значок gravatar. '' - Не відображати.
		'user' => '', // id користувачів. Включити(5,12,35) чи виключити(-5,-12,-35) коментарі користувачів. По дефолту - всі користувачі.
		'echo' => 1 // виводити на екран (1) або повертати (0).
		'comm_type' => 'comment', // назва типу коментаря
		'meta_query' => '', // WP_Meta_Query
		'meta_key' => '', // WP_Meta_Query
		'meta_value' => '', // WP_Meta_Query
		'url_patt' => '', // оптимізація посилання на комент. Пр: '%s?comments#comment-%d' плейсхолдери будуть замінені на $post->guid та $comment->comment_ID
	);

	$ args = wp_parse_args ($ args, $ def);
	extract ($ args);

	$AND = '';

	// ЗАПИСИ
	if($term) {
		$cats = explode(',', $term);
		$cats = array_map( 'intval', $cats );

		$ CAT_IN = ($ cats [key ($ cats)]> 0); // із категорій чи ні

		$cats = array_map( 'absint', $cats); // Заберемо мінуси
		$AND_term_id = 'AND term_id IN ('.implode(',', $cats).')';

		$posts_sql = "SELECT object_id FROM $wpdb->term_relationships rel
		LEFT JOIN $wpdb->term_taxonomy tax ON (rel.term_taxonomy_id = tax.term_taxonomy_id) WHERE 1 $AND_term_id ";

		$AND .= 'AND comment_post_ID'. ($CAT_IN ? 'IN' : 'NOT IN') .' ('.$posts_sql.')';
	}

	// ЮЗЕРИ
	if($user) {
		$users = explode(',', $user);
		$users = array_map('intval', $users);

		$USER_IN = ($users[key($users)]> 0);

		$users = array_map('absint', $users);

		$AND .= 'AND user_id'. ($USER_IN ? 'IN' : 'NOT IN') .' ('. implode(',', $users) .')';
	}

	// WP_Meta_Query
	$META_JOIN = '';
	if( $meta_query || $meta_key || $meta_value ){
		$ mq = new WP_Meta_Query ($ args);
		$mq->parse_query_vars( $args );
		if( $mq->queries ){
			$mq_sql = $mq->get_sql('comment', $wpdb->comments, 'comment_ID' );
			$META_JOIN = $mq_sql['join'];
			$AND .= $mq_sql['where'];
		}
	}

	$sql = $wpdb->prepare("SELECT * FROM $wpdb->comments LEFT JOIN $wpdb->posts ON (ID = comment_post_ID ) $META_JOIN
	WHERE comment_approved = '1' AND comment_type = %s $AND ORDER BY comment_date_gmt DESC LIMIT %d", $comm_type, $limit);

	//die($ sql);
	$results = $wpdb->get_results( $sql );

	if( ! $results )
		return 'Коментарів немає.';

	// HTML
	$out = $grava = '';
	foreach ( $results as $comm ){
		if($gravatar)
			$grava = get_avatar( $comm->comment_author_email, $gravatar );

		$comtext = strip_tags( $comm->comment_content );
		$com_url = $url_patt? sprintf( $url_patt, $comm->guid, $comm->comment_ID ) : get_comment_link( $comm->comment_ID );

		$leight = (int) mb_strlen ($ comtext);
		if( $leight > $ex )
			$comtext = mb_substr( $comtext, 0, $ex ) .' …';

		$out.='
		<li>
			'. $grava .' <b>'. strip_tags( $comm->comment_author ) .':</b>
			<a href="'. $com_url .'" title="до запису: '. esc_attr( $comm->post_title ) .'">'. $comtext .'</a>
		</li>';
	}

	if($echo)
		return print $out;
	return $out;
}

Список змін:

1 червня 2015
Повністю переписав функцію. Додаткові параметри і т.д.
9 листопада 2010
Додав аватарки від сервісу gravatar.com у виведення функції.
13 червня 2010
Оновив код функції, до цього до тексту коментаря додавалася три крапки, навіть якщо текст був коротшим, ніж довжина, що виводиться. Тепер, якщо коментар коротше заданої довжини, то трикрапка не додається.
21 серпня 2010
На прохання
Анатолія v додав можливість виводити коментарі для постів з певних рубрик (включати рубрики) або виключати коментарі до постів з певних рубрик (виключати рубрики)

Приклади використання

#1 Виводимо останні коментарі

<ul>
	<?php kama_recent_comments( "limit=10&ex=40"); ?>
</ul>
  • 10 – це кількість коментарів, які будуть показані.
  • 40 – скільки символів з тексту коментаря буде виведено. Символи вважаються після того, як з тексту вирізали всі HTML теги, щоб зберегти рівну довжину текстів.

#2 Коментарі для постів із заданих рубрик/міток

Також у функції можна включати/виключати коментарі до записів із зазначених рубрик/міток/довільних таксономій. ЗА це відповідає параметр term, вказувати потрібно ID рубрик (побачити їх можна в адмінці в розділі “рубрики”). Для виключення перед id ставиться “-“:

<ul>
	<?php kama_recent_comments("limit=10&ex=40&term=5,10,34"); ?>
</ul>

Виведе 10 коментарів, з довжиною тексту до 40 символів, для постів із рубрик 5,10,34. Щоб виключити ці рубрики, потрібно буде викликати функцію так:

<ul>
	<?php kama_recent_comments("limit=10&ex=40&term=-5,-10,-34"); ?>
</ul>

Виведе 10 коментарів з довжиною тексту до 40 символів для всіх постів, крім постів з рубрик 5,10,34.

Одночасно включати та виключати рубрики не можна! Втім, це позбавлене здорового глуздуsmile

#3 Повертаємо результат

Якщо потрібно повернути результат для подальшої обробки в PHP, а не виводити на екран, то параметр echo ставимо в 0:

<?php kama_recent_comments('echo=0'); ?>

#4 Аватарки

Якщо потрібно включити показ аватарок із сервісу gravatar, то вказуємо параметр gravatarяк розмір необхідної аватарки. Наприклад, 20 – активує показ аватарок і виведе аву шириною та висотою в 20px.

<ul>
	<?php kama_recent_comments('gravatar=20'); ?>
<ul>

Залишити коментар

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