最近有点想换主题了呃···~~~···自己改的地方有点多,主题改动了,源文件也改动了,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');
主要参考文章:
- 修改WordPress侧边栏小工具之近期评论/最新评论
- 制作WordPress“带Gravatar头像评论”小工具(集成主题中、含选项)
- 改进WordPress侧边栏最新评论功能:显示自己(作者)的评论+直接显示评论内容
说明:
get_comment_link()——
是获取评论的链接地址,其实就是文章地址加上‘#comment-评论ID’;mb_strimwidth(str,0,34,”…”)
——这个是最关键,截取字符。参数一是要截取的源内容,参数二三是始末位置,参数四是如果截取后源内容还有剩就用参数四添加在输出后面。get_avatar($comment,’32′)
——有四个参数( 官方文档),第一是邮件地址或用户id,第二是图片大小,第三是默认图像地址,第四是头像Alt标签。通过第三个参数可以修改没有头像的用户的米哦人头像哦!
声明
- 本作品采用署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。除非特别注明, 霖博客文章均为原创。
- 转载请保留本文(《带头像的 “近期评论” 小工具》)链接地址: https://youthlin.com/?p=610
- 订阅本站:https://youthlin.com/feed/
“带头像的 “近期评论” 小工具”上的29条回复
以前找个这样的教程找不到,现在主题自带了你就写出来了
啊哈?主题自带头像了啊,我没发现呢。这是14年写的那时还没有啊。这个方法可以自定义要显示的内容呢
感觉好乱
谢谢楼主的分享,很不错的东东、
厉害
现在看到有点晕
亲,其实就4个函数,照着写就没问题的~
感觉加了头像反而不好看了
嘿,我看到我了!
默认评论真的是傻蛋,老外不知怎么想的。
学习了,不过我没有使用这个!
css文件你真不该放在七牛。。。七牛的域名解析有些慢,让first byte延迟了。css应该就放在网站同域名下
哦!原来空间在美国,等下设置下把css弄回来。first byte?
继承类,很好。我也曾有评论这样改的想法,终没有去碰它。
这两天折腾后发现,小工具也是可以自己写的 ,这两天搜索了一些文章,旁边的说说就是自己写的小工具(以前是直接加在sidebar.php )
有想法就试试呗,先在本地调试,一步一步来,一不小心就弄好了
http://doufu.ru/minty-improved-version-available-recent-comments-widget.html 我在用这个
哈哈,我也是搜索的,没想到你早就写了(或许我以前看到了但忘了 )
你网站改的越来越漂亮了。
没有啊,我还考虑换主题呢
厉害,支持个,感觉头像小点好看些
现在我的css还没完全弄好
还不如新加一个小工具
新加也可以,
一直在学习,始终在努力
等我换回wordpress的原生评论了,再来看一次。
赞一个 支持博主
发现博主是个PHP大神……
膜拜……
我可不是,你的博客程序我都看不懂,我只是谷歌常用的wordpress函数瞎写的