Функция для вывода последних комментариев
Начну с того, что комментарии в 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.
Одновременно включать и исключать рубрики нельзя! Впрочем, это лишено здравого смысла 
#3 Возвращаем результат
Если нужно возвратить результат для дальнейшей обработки в php, а не выводить на экран, то параметр echo ставим в 0:
<?php kama_recent_comments('echo=0'); ?>
#4 Аватарки
Если нужно включить показ аватарок из сервиса gravatar, то указываем параметр gravatar как размер необходимой аватарки. Например, 20 - активирует показ аватарок и выведет аву шириной и высотой в 20px.
<ul>
<?php kama_recent_comments('gravatar=20'); ?>
<ul>