WordPress制作读者评论排行榜[无插件]
所谓的读者评论排行榜,就是展示在本博客评论最多的几个读者的头像(如果你还没有自己的个性头像或不知道怎么设置头像,请点此设置通用头像),按照读者的评论数进行排名,同时附上他们的博客网址,以示鼓励。这个通常也称为"读者墙",我将这个栏目命名为"30天内最活跃的读者"。
其实这个东西之前已经有很多人分享过代码,目前发现了两个版本"免插件版侧边栏读者墙","免插件版側邊欄讀者牆",代码都大同小异,不过这帮人只是纯粹的分享代码,并没有道出其中的原委,对PHP不太熟悉的WordPress博主来说,只能照搬,还不能自己做修改。那我今天就来跟大家解释这其中的玄机,兴许会对你有所帮助。

以下是我自行修改后的代码,你可以直接用到你的WordPress主题中,如放在 single.php 、 sidebar.php 或 page.php中,并不是非得放在侧边栏,注意修改后用UTF-8编码保存,否则中文可能会乱码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <div id="hotfriends"> <h3>30天内最活跃的读者</h3> <ul> <?php /** * WordPress制作读者评论排行榜 * @author: Ludou * @Email : zhouzb889@gmail.com * @Blog : http://www.ludou.org/ */ global $wpdb; // 执行数据库查询 $counts = $wpdb->get_results("SELECT COUNT(comment_author) AS cnt, comment_author, comment_author_url, comment_author_email FROM {$wpdb->prefix}comments WHERE comment_date > date_sub( NOW(), INTERVAL 1 MONTH ) AND comment_approved = '1' AND comment_author_email != 'example@example.com' AND comment_author_url != '' AND comment_type = '' AND user_id = '0' GROUP BY comment_author_email ORDER BY cnt DESC LIMIT 15"); $mostactive = ''; if ( $counts ) { // 输出读者列表 foreach ($counts as $count) { $c_url = $count->comment_author_url; $mostactive .= '<li>' . '<a href="'. $c_url . '" title="' . $count->comment_author .' 发表 '. $count->cnt . ' 条评论" target="_blank">' . get_avatar($count->comment_author_email, 55, '', $count->comment_author . ' 发表 ' . $count->cnt . ' 条评论') . '</a></li>'; } echo $mostactive; } ?> <div style="clear:both;"></div> </ul> </div> <!-- / hotfriends --> |
与本文开头提到的两个读者墙版本不同的是,我改写了SQL查询语句,使得SQL查询的时间大大缩短了。我做了个实验,相同的查询结果,前两个版本查询花费 0.0240 秒,而我的这个版本查询只花费了 0.0041 秒,时间效率可见一斑,因为我这个版本只查询一个数据库表wp_comments,没有使用嵌套查询,不考虑加密文章。如果你不在乎这点时间效率,使用哪个版本都一样。
以上14 ~ 24行代码用于执行数据库查询的SQL,你可以自己设定条件来决定哪些读者可以进入你的评论排行榜单,下面讲讲如何更改这部分代码,自定义你的读者评论排行榜结果。
一、限定排行榜的时间范围
第16行代码中 INTERVAL 1 MONTH 用于只统计最近一个月的评论,这个排行榜中只显示一个月内最活跃的读者,如果你想自定义时间范围,可参照下表对其进行更改:
| 代码 | 时间范围 |
INTERVAL 1 MONTH |
最近一个月内 |
INTERVAL 3 YEAR |
最近3年内 |
INTERVAL 2 WEEK |
最近2周内 |
INTERVAL 6 DAY |
最近6天内 |
如果你只想显示本月的排行榜,请将第16行代码改成:
WHERE MONTH(comment_date)=MONTH(NOW()) and year(comment_date)=year(now())
二、限定评论是否审核
第17行代码 AND comment_approved = '1' 用于限定只统计已经通过审核的评论,如果你想统计未通过审核的评论,你可以将这一句代码删除。
三、排除某些读者
第18行代码 AND comment_author_email != 'example@example.com' 用于排除不计入榜单的评论者,例如博主自己,将email地址改成博主的Email即可。这里我觉得使用评论者的Email作为限定条件比昵称更好,毕竟头像也是由Email决定的。如果你想排除多个评论者,可以多写几行类似的代码,Email不同即可,如:
1 2 | AND comment_author_email != 'example1@example.com' AND comment_author_email != 'exam2@exam.com' |
四、是否包括不填URL的评论者
第19行代码 AND comment_author_url != '' 排除没填URL的评论者,也就是那些没有网站的评论者将无法进入你的排行榜。
五、限定评论的类型
第20行代码 AND comment_type = '' 限定了评论的类型,这行代码排除了 trackback 和 pingback,如果你还想统计这两种评论类型,你可以将此行代码删除。
六、是否包含博客的注册用户
第21行代码 AND user_id = '0' 使排行榜中不包含博客的注册用户(包括博主),注册用户将无法进入你的排行榜。如果你的博客有大量的注册用户,或者你的博客只有博主这个注册用户,你可以将此行代码删除。
七、限定排行榜中的人数
第24行代码中 LIMIT 15 用于限定排行榜中的人数,这里限制输出15位读者,你可以根据需要做一下更改。
八、限制头像的大小
第31行代码中的 55 限定了输出的头像大小为 55 * 55,如果你不需要这么大的尺寸,你可以将这个数值改小点。
最后提供CSS样式,也就是控制这个排行榜怎么显示的代码。复制到主题目录下的style.css中即可,你可以根据需要做些更改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #hotfriends { text-align:center; } #hotfriends ul { padding:7px; } #hotfriends ul li { float:left; list-style:none outside none; margin:6px; padding:0; } #hotfriends h3 { font-size:15px; margin:7px 7px 0; } |
本文版权归露兜博客所有,转载引用请完整注明以下信息:
本文作者:Ludou
本文标题:WordPress制作读者评论排行榜[无插件]
本文地址:http://www.ludou.org/most-active-readers.html
我的博客终于也用上啦,嘿嘿。。。
收藏了,有时间慢慢研究!
好东西收下了..thanks for you …….
很详细,谢谢。博主也很热情。虽然没解决,只是我的博客问题,再次说声谢谢。
哈,不错啊,真是有创意的小玩意的,用上了觉得不错的啊
感谢一下 找了那么多代码 这个可算用上了
不错!用上啦 。。Thx >.<
按照这个方法做了,但是提示这样的错误:Fatal error: Call to a member function get_results() on a non-object
我用的是3.0.3版本的
是不是数据库查询有问题?
那你把第一个:
<?php
改成:
<?php
global $wpdb;
well done~多谢。
评论这么多,应该不错,我去试试
评论多跟不错成正比吗?
是好评不少,而且博主热心回复,我用了,设置好了,挺好的!谢谢
请问如何为留言板增加回复功能
谢天谢地,已实现无插件嵌套和留言回复
#hotfriends ul {
padding:7px;
}
这段代码在ie上是否存在兼容问题, 读者墙与他下面模块距离不正常,其他浏览器没事
不同网站的具体情况也都不一样,也不是说一段css代码在所有网站都适用,你自己找找原因。以上这段代码在普遍意义上讲在各浏览器之间不会有太大的差异。
分享元素用上了
谢谢分享