kn007的个人博客
♥ You are here: Home > 软件与网络 > php > WordPress中无插件定制读者墙中评论排行榜

WordPress中无插件定制读者墙中评论排行榜

by | 8 Comments

提醒:本文最后更新于 4147 天前,文中所描述的信息可能已发生改变,请仔细核实。

所谓的评论排行榜,就是展示在本博客评论最多的几个读者的头像(如果你还没有自己的个性头像或不知道怎么设置头像,请点此申请定制的头像),按照读者的评论数进行排名,同时附上他们的博客网址。这个通常也称为"读者墙"。
Wordpress提供了一个全局变量$wpdb来访问wordpress数据库,通过wpdb可以实现对数据库的各种操作。这里各种操作包括添加一个新表,查询,删除,更新等等。提供了处理用户自定义数据的接口。注意在调用的函数里面要全局化这个变量。通过这个变量可以访问数据库中的任何表,但是仅限于一个数据库,如果要访问多个数据库,需要重新实例化一个wpdb类。
以下是读者墙评论排行榜代码,你可以直接用到你的WordPress主题中,如放在 single.php 、 sidebar.php 或 page.php中,并不是非得放在侧边栏,注意修改后用UTF-8编码保存,否则中文可能会乱码:

<div id="hotfriends">
<h3>读者墙-1个月内最活跃</h3>
<ul>
<?php
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 20");
$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, 16, '', $count->comment_author . ' 发表 ' . $count->cnt . ' 条评论') . '</a></li>';
}
echo $mostactive;
}
?>
<div style="clear:both;"></div>
</ul>
</div> <!-- / hotfriends -->

以上7 ~ 17行代码用于执行数据库查询的SQL,你可以自己设定条件来决定哪些读者可以进入你的评论排行榜单,下面讲讲如何更改这部分代码,自定义你的读者评论排行榜结果。

一、限定排行榜的时间范围

第9行代码中 INTERVAL 1 MONTH 用于只统计最近一个月的评论,这个排行榜中只显示一个月内最活跃的读者,如果你想自定义时间范围,可参照下表对其进行更改:

代码 时间范围
INTERVAL 1 MONTH 最近一个月内
INTERVAL 3 YEAR 最近3年内
INTERVAL 2 WEEK 最近2周内
INTERVAL 6 DAY 最近6天内

如果你只想显示本月的排行榜,请将第9行代码改成:
WHERE MONTH(comment_date)=MONTH(NOW()) and year(comment_date)=year(now())

二、限定评论是否审核

第10行代码

AND comment_approved = '1'


用于限定只统计已经通过审核的评论,如果你想统计未通过审核的评论,你可以将这一句代码删除。

三、排除某些读者

第11行代码

AND comment_author_email != 'example@example.com'


用于排除不计入榜单的评论者,例如博主自己,将email地址改成博主的Email即可。这里我觉得使用评论者的Email作为限定条件比昵称更好,毕竟头像也是由Email决定的。如果你想排除多个评论者,可以多写几行类似的代码,Email不同即可,如:

AND comment_author_email != 'example1@example.com'
AND comment_author_email != 'exam2@exam.com'

四、是否包括不填URL的评论者

第12行代码

AND comment_author_url != ''


排除没填URL的评论者,也就是那些没有网站的评论者将无法进入你的排行榜。

五、限定评论的类型

第13行代码

AND comment_type = ''


限定了评论的类型,这行代码排除了 trackback 和 pingback,如果你还想统计这两种评论类型,你可以将此行代码删除。

六、是否包含博客的注册用户

第14行代码

AND user_id = '0'


使排行榜中不包含博客的注册用户(包括博主),注册用户将无法进入你的排行榜。如果你的博客有大量的注册用户,或者你的博客只有博主这个注册用户,你可以将此行代码删除。

七、限定排行榜中的人数

第17行代码中

LIMIT 20


用于限定排行榜中的人数,这里限制输出20位读者,你可以根据需要做一下更改。

八、限制头像的大小

第23行代码中的 16 限定了输出的头像大小为 16 * 16,如果你不需要这么大的尺寸,你可以将这个数值改小点。

最后提供CSS样式,也就是控制这个排行榜怎么显示的代码。复制到主题目录下的style.css中即可,你可以根据需要做些更改:

#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;
}

效果图:

转载请注明转自:kn007的个人博客的《WordPress中无插件定制读者墙中评论排行榜

donate
有所帮助?

Comments

8 Comments立即评论
  1. LV4回复

    来过啦,这个功能loper有自带哇

    1. MOD回复

      @尽欢: 对的额,但是可以再优化,这个你可以用专门的工具测试一下,mysql检索明显扩多了不止一个级别

    2. LV4回复

      @kn007: 嗯,默认的是有些问题

    3. MOD回复

      @尽欢: 其实也没问题,就是废话多,哈哈

  2. 一直想给博客搞个读者墙,可是没有找到教程,今天算是学习了,赶紧收藏

  3. 这个很容易的说,代码到处可以找到

    1. MOD回复

      @Win8迷: 是吧,异曲同工之妙吧。。

  4. 不错不错,可以试试

icon_wink.gificon_neutral.gificon_mad.gificon_twisted.gificon_smile.gificon_eek.gificon_sad.gificon_rolleyes.gificon_razz.gificon_redface.gificon_surprised.gificon_mrgreen.gificon_lol.gificon_idea.gificon_biggrin.gificon_evil.gificon_cry.gificon_cool.gificon_arrow.gificon_confused.gificon_question.gificon_exclaim.gif