Функция для вывода последних комментариев
Начну с того, что комментарии в 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>