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

Начну с того, что комментарии в 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] => mail@gmail.com
	[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 Выводим последние комментарии

<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>
194 комментария
Полезные - 8Вопросы - 2 Все
    Войти