用get_comments()函数实现带头像最新评论

其实WordPress官方一直不推荐直接用SQL语言调用数据库数据,所以一直以来WordPress官方主题审核中,直接用SQL语句的代码是通不过审核的,这也是为啥我提交的主题都没有提供“带头像的最新评论”代码。

去年提交的主题偶尔会让你通过使用SQL语句实现的带头像最新评论的代码,后来就不行了,审核结果是不准直接使用SQL,请使用get_comments()。但因为对get_comments()函数不熟,加上官方函数文档不够详细,所以一直没折腾。

今年国庆窝在家里,比较闲,就稍微研究了一下,没想到竟然搞定了,虽然效率方面没有直接用SQL快,但这点速度差异我们是感觉不出来的,速度的问题还是交给主机吧。

下面是我折腾好的代码,直接CP到侧边栏即可使用,当然还要根据自己主题设置一下css样式。

get_comments()函数实现的带头像最新评论代码

2010.10.10Edit:增加对表情输出)

<h3>Recent Comments</h3>
<ul class="recentcomments">
<?php
$show_comments = 10; //评论数量
$my_email = get_bloginfo ('admin_email'); //获取博主自己的email
$i = 1;
$comments = get_comments('number=200&status=approve&type=comment'); //取得前200个评论,如果你每天的回复量超过200可以适量加大
foreach ($comments as $rc_comment) {
	if ($rc_comment->comment_author_email != $my_email) {
		?>
		<li><?php echo get_avatar($rc_comment->comment_author_email,32); ?><span class="comment_author"><?php echo $rc_comment->comment_author; ?> says:</span><br /><a href="<?php echo get_permalink($rc_comment->comment_post_ID); ?>#comment-<?php echo $rc_comment->comment_ID; ?>"><?php echo convert_smilies($rc_comment->comment_content); ?></a></li>
		<?php
		if ($i == $show_comments) break; //评论数量达到退出遍历
		$i++;
	} // End if
} //End foreach
?>
</ul>

其中 $show_comments = 10 里面的 10 是要显示的评论数量。

ps1:评论截断你可以用php截断函数 mb_strimwidth() 实现,具体参考《mb_strimwidth函数的简单应用

ps2:也可以用css的overflow:hidden属性实现假截断,参考我的css:

#sidebar .recentcomments img.avatar{width:26px;height:26px;float:left;position:relative;border:1px solid #ddd;margin:0 5px 0 0;padding:2px;}
#sidebar ul.recentcomments{list-style:none;padding-left:0;}
#sidebar ul.recentcomments li{margin:5px 0 0;line-height:16px;height:32px;overflow:hidden;}
#sidebar .comment_author{color:#999;}

效果图:

折腾完,喜欢用哪个就用哪个吧。

zww
or
oooo

“用get_comments()函数实现带头像最新评论”有132条评论

  1. 学习了

  2. Gorgons. says:

    直接调用sql会怎么样?

    1. zwwooooo says:

      @Gorgons.
      一般不会怎么样吧,速度还更快,真要说缺点就是直接用sql容易出现漏洞吧,具体不太清楚

  3. 集趣 says:

    使用SQL出现漏洞是又可能,但对于博客来说,应该不是大问题的

    1. zwwooooo says:

      @集趣
      嗯,所以也不用在意,不过sql语句复杂(不懂的情况下),看着不爽,哈哈。

  4. Suyos says:

    已经用上了哈,效果很好

    1. zwwooooo says:

      @Suyos
      看了,效果不错

  5. 流年 says:

    我决定踩一个算了

    1. zwwooooo says:

      @流年
      啥?踩一个?

    2. 流年 says:

      @zwwooooo
      嘿嘿,路过而已

    3. zwwooooo says:

      @流年
      原来如此,喝杯茶吧

  6. 木本无心 says:

    很多wp好像都已经有这个功能了,zww真爱折腾。

    1. zwwooooo says:

      @木本无心
      多个方式没坏处

  7. Kana says:

    还是习惯调sql.....不过多一个选择也很好!!!

    1. zwwooooo says:

      @Kana
      多个方法没坏处

  8. 难怪有人说主题一直审核不能通过呢…………

    1. zwwooooo says:

      @星野苍真
      主题不能通过有很多原因

  9. 园子 says:

    还是自己写的方便
    我依然是用插件实现的。

    1. zwwooooo says:

      @园子
      插件方便

  10. 阿修 says:

    :eek: z大威武~~这个方法好。

    1. zwwooooo says:

      @阿修
      闲来蛋疼折腾^

  11. 七七 says:

    嗯,自己一直没折腾这个,不错的方法!

    1. zwwooooo says:

      @七七
      需要才去折腾

  12. sunbird says:

    学习了,自己一直用插件,还是自己会好啊 :razz:

    1. zwwooooo says:

      @sunbird
      因为不太喜欢用一大堆插件,所以还是自己加

    2. sunny says:

      @zwwooooo 网上找教程代码,很多都指向你这里来,我用的是 Google ,在美国,很想知道你们怎么学习的,我自己设计个主题,但是评论模块弄的我半死,总是影响到其他布局!我现在一步步的学习,还请各位前辈多多指教!

    3. zwwooooo says:

      @sunny 可能我早期写的教程权重大吧...怎么学习?这个就没啥好说吧,简单来说主要是经验积累,初期先看看 html、css、php、js(新手建议jQuery吧) 基础教程+动手,后期看看数据库相关。遇到问题先找Google然后测试。
      至于设计,这个看你有没有 idea 了,当然还要学点 ps
      评论模块默认用的是 ol > li 结构,你用 class 来控制样式。

  13. crossyou says:

    问下你的这个用户头像是怎么处理的?
    怎么都是请求的你b.zww.me地址的? :evil:

    1. zwwooooo says:

      @crossyou
      本地缓存

    2. crossyou says:

      @zwwooooo
      用的插件吗?

    3. zwwooooo says:

      @crossyou
      不是,willin的简单头像缓存代码,具体去这里吧 http://kan.willin.org/?p=1277
      貌似也有插件。

  14. MOPVHS says:

    嘿,V5,又多了一个选择啦~~~

    1. zwwooooo says:

      @MOPVHS
      多个选择好

    2. MOPVHS says:

      @zwwooooo
      我那边暂时没有邮件通知功能,过来人肉回复 下:

      很奇怪,你的评论n次才成功,前面几次跳转到404页面了

      呃,不是吧,现在还是那样?我已经下载最新的wordpress-3.0.1-zh_CN.zip和zsofa.1.0.8.zip覆盖掉了…

    3. zwwooooo says:

      @MOPVHS
      又去试了一下,这次是匿名了,2次都是,可能是你的主题cookie问题,貌似抓取到
      测试结果:
      貌似只有填上昵称、email、url(起码要在那3个框点一下)才能评论

  15. 星尔 says:

    博主好,我本地调试怎么不显示任何评论呢?这个是怎么回事呢?

    1. zwwooooo says:

      @星尔
      其他人都ok,已经经过验证了,认真检查一下。正常情况下直接cp到侧边栏就会显示的了

  16. winky says:

    本地测试成功,果然够折腾~赞一个。。。

    1. zwwooooo says:

      @winky
      哈哈,多个方法好

  17. 如何不显示trackback呢?我看函数里写的是type=comment,但我的依旧会显示trackback

    1. zwwooooo says:

      @微奇生活
      会么?应该不会的

      1. 我也觉得应该不会,可是确实显示了,也许和我的function文件有关系,仔细研究下

  18. 奚少 says:

    zww大师,我用其他的比如完善篇那个最新评论不能输出表情,不知道为啥。。。然后我用了这个方法。但是产生了个问题就是如果新的评论刚好重新分页后,以前的评论点击以后不能直接跳转到上一个分页。我看你在http://zww.me/archives/24818有说过链接修正。那这个能否修正呢?

    1. zwwooooo says:

      @奚少
      1.我不是大师。。。
      2.你用了评论分页的话用下面这个函数生成评论链接吧

      htmlspecialchars(get_comment_link( $rc_comm->comment_ID)))

      如果你的主题只定义了评论和pingback分离的话就用

      htmlspecialchars(get_comment_link( $rc_comm->comment_ID, array('type' => 'comment')))
    2. 奚少 says:

      @zwwooooo
      嘿嘿,不好意思,就是不知道如何称呼所以就称呼大师了,以后就称呼zww吧~谢谢,我去试试~

    3. zwwooooo says:

      @奚少
      大师这称呼压力很大,哈,慢慢折腾

  19. 感觉怎么没有排除自己?

    1. zwwooooo says:

      @yesureadmin
      排除系统用户,你看我的有我自己的么?霍霍。如果是其他用户就要自己改了

    2. @zwwooooo
      这个代码,我放到我的sidebar-left中在IE中sidebar-right挤到一边去了,也就是错位了.在CSS中可以作哪些尝试?其它浏览器都是好的,谢谢帮忙

    3. zwwooooo says:

      @yesureadmin
      ie要看ie几,自己根据自己主题调整css还有兼容性。

    4. @zwwooooo
      当然是最垃圾的IE6了

    5. @zwwooooo
      具本如何操作哦admin_email改成自己的邮件.好像不行

    6. zwwooooo says:

      @yesureadmin
      就是这句了:
      $my_email = get_bloginfo ('admin_email');
      改为博主的邮箱吧,如:
      $my_email = 'xxx@gmail.com';

    7. @zwwooooo
      如何像你的一样,所有的图像是留言者的名字作为ALT属性呢?

    8. zwwooooo says:

      @yesureadmin
      我写过相关文章的,搜一下 avatar

  20. DH says:

    不错 google搜索到你这里了

    1. zwwooooo says:

      @DH
      google来也正常吧

发表评论

昵称 *

网址

B em del U Link Code Quote