分类
wordpress

带头像的 “近期评论” 小工具

最近有点想换主题了呃···~~~···自己改的地方有点多,主题改动了,源文件也改动了,3.8.1的安全更新差点都不敢随意升级。。所以我们尽量不要改源文件好。但总有的地方自己不满意,比如这个“近期评论”小工具:默认的不显示评论内容(这也叫近期评论),而且把作者的回复也都输出,还不带头像······好吧,操刀——

小工具嘛,网上的方法都是直接去改 /wp-includes/default-widgets.php :参考《 改进WordPress侧边栏最新评论功能:不显示自己(作者)的评论+直接显示评论内容 》。

其实我们可以自己写个小工具把按照上面这个链接的教程改后的内容作为我们小工具的内容,这样就不需要改动源文件了,下次WP升级就大胆的升吧!
不过因为小工具都是继承自WP_Widget 的类,他们本身也是class,所以我们可以少写点,直接继承自WP_Widget_Recent_Comments这个默认的近期评论类。

先来效果图:

近期评论小工具带头像-效果图
近期评论小工具带头像

/** 不修改源文件优化'近期评论'小工具(带头像哦)
 *  https://youthlin.com/?p=610 
 */
class My_Widget_Recent_Comments extends WP_Widget_Recent_Comments {
//新定义一个小工具类,继承自WP_Widget_Recent_Comments,那么只需重写function widget( $args, $instance )
    function My_Widget_Recent_Comments() {
    //函数名称与类名相同,初始化小工具,这个要和源文件中的不同,因为小工具不能重名
    $widget_ops = array('classname' => 'my_widget_recent_comments', 'description' => __('显示最新评论内容'));
    $this->WP_Widget('my-recent-comments', __('近期评论(带头像)', 'my'), $widget_ops);
    }
    function widget( $args, $instance ) {
    //先把源文件这一函数复制过来。
    global $comments, $comment;
    $cache = wp_cache_get('widget_recent_comments', 'widget');
    if ( ! is_array( $cache ) )
	$cache = array();
    if ( ! isset( $args['widget_id'] ) )
	$args['widget_id'] = $this->id;
    if ( isset( $cache[ $args['widget_id'] ] ) ) {
	echo $cache[ $args['widget_id'] ];
	return;
    }
    extract($args, EXTR_SKIP);
    $output = '';
    $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Comments' );
    $title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
    $number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5;
    if ( ! $number )
 	$number = 5;
////////////////////====第二步修改这里======////////////////////////=================================================
    $comments = get_comments( apply_filters( 'widget_comments_args', array( 'number' => $number, 'status' => 'approve', 'post_status' => 'publish' , 'user_id' => 0) ) );
    $output .= $before_widget;
	if ( $title )
	  $output .= $before_title . $title . $after_title;
	$output .= '<ul id="recentcomments">';
	if ( $comments ) {
	  // Prime cache for associated posts. (Prime post term cache if we need it for permalinks.)
	  $post_ids = array_unique( wp_list_pluck( $comments, 'comment_post_ID' ) );
	  _prime_post_caches( $post_ids, strpos( get_option( 'permalink_structure' ), '%category%' ), false );
	  foreach ( (array) $comments as $comment) {
////////////////////====第零步修改这里==添加一个头像,一定要在这个foreach里面! =====================================
		$avatar = get_avatar($comment,34,'','头像');
////////////////////====第一步修改这里======/////////////////////////================================================
		$output .=  '<li class="recentcomments">' . /* translators: comments widget: 1: comment author, 2: post link */
		sprintf(_x('%1$s : %2$s', 'widgets'),$avatar . get_comment_author_link(), '<a href="'
		//上面一行加了头像,发现了吗
		. esc_url( get_comment_link($comment->comment_ID) ) 
		. '" title="'.get_the_title($comment->comment_post_ID).','.get_comment_date(Y-m-j)
		//加了鼠标悬浮在评论内容时显示文章标题及日期 http://ifonder.com/2012/04/13/change-recent-comments-widget/
		. '">'
		. mb_strimwidth(strip_tags($comment->comment_content),0,34, '...>>') . '</a>') . '</li>';
		}
 	  }
	/*
	http://www.typemylife.com/wordpress-recent-comments-remove-author-name-display-content/
	修改步骤一:
	把(_x('%1$s on %2$s', 'widgets')里面的这个单词“on”改成冒号“:”。
	修改步骤二:
	把get_the_title($comment->comment_post_ID)改为mb_strimwidth(strip_tags($comment->comment_content),0,50, 。。。》)。
	这里的数字“50”是用来限制评论显示的字数,可以自行修改,至于后边那个小尾巴"。。。》"则是用来在实际评论字数少于允许显示的字
	数时补充空白处的,也可以依自己喜欢的格式修改之。 (霖博客注:。。。》要用单引号括起来)
	以上修改完成后,最新评论的格式就变为:“读者ID”+":"+“实际评论内容”。
	2)让最新评论不显示作者自己的评论
	修改对象依然是上面提到的default-widgets.php文件。
	搜索到以下代码片段:
	$comments = get_comments( apply_filters( 'widget_comments_args', array( 'number' => $number, 'status' => 'approve', 'post_status' => 'publish' ) ) );
	修改为以下格式:
	$comments = get_comments( apply_filters( 'widget_comments_args', array( 'number' => $number, 'status' => 'approve', 'post_status' => 'publish', 'type' => 'comment', 'user_id' => 0 ) ) );
	解释一下:'user_id' => 0效果为不显示站长自己的回复,'type' => 'comment'效果为只显示评论类留言,即,不显示pingback和trackback类留言。
		*/
//这是以前我在typemylife.com那里学的代码,所以把步骤注释起来了,建议大家去学习别人的教程自己动手时
//也留个注释并保留链接,这样也算尊重原作者,而且方便自己以后找 :) 
	$output .= '</ul>';
	$output .= $after_widget;

	echo $output;
	$cache[$args['widget_id']] = $output;
	wp_cache_set('widget_recent_comments', $cache, 'widget');
	}
}
register_widget('My_Widget_Recent_Comments');

主要参考文章:

说明:

  • get_comment_link()—— 是获取评论的链接地址,其实就是文章地址加上‘#comment-评论ID’;
  • mb_strimwidth(str,0,34,”…”)——这个是最关键,截取字符。参数一是要截取的源内容,参数二三是始末位置,参数四是如果截取后源内容还有剩就用参数四添加在输出后面。
  • get_avatar($comment,’32′)——有四个参数( 官方文档),第一是邮件地址或用户id,第二是图片大小,第三是默认图像地址,第四是头像Alt标签。通过第三个参数可以修改没有头像的用户的米哦人头像哦!

“带头像的 “近期评论” 小工具”上的29条回复

啊哈?主题自带头像了啊,我没发现呢。这是14年写的那时还没有啊。这个方法可以自定义要显示的内容呢

css文件你真不该放在七牛。。。七牛的域名解析有些慢,让first byte延迟了。css应该就放在网站同域名下 [/坏笑] [/坏笑] [/坏笑]

这两天折腾后发现,小工具也是可以自己写的 [/得意] ,这两天搜索了一些文章,旁边的说说就是自己写的小工具(以前是直接加在sidebar.php [/撇嘴]

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

[/鼓掌] [/难过] [/调皮] [/白眼] [/疑问] [/流泪] [/流汗] [/撇嘴] [/抠鼻] [/惊讶] [/微笑] [/得意] [/大兵] [/坏笑] [/呲牙] [/吓到] [/可爱] [/发怒] [/发呆] [/偷笑] [/亲亲]