在评论排行中排除无头像用户

记得好久之前老郑提过这个问题(老郑你可是治我文荒的大救星啊),就是他边栏读者排行里有人刷评论(应该是垃圾评论),但他不希望没头像的人出现在排行榜里,所以问我有没有办法,我转身就给忘了,但是由于昨天一天没憋出来技术文,加上今天起的早,我研究了一下,找到了完美的解决方法!各位大大应该会很需要这个,从此垃圾评论再也不会上榜了~~~(有文章写了好鸡冻,所以多说一些废话)
首先在functions.php里加入如下代码:

function no_gravatar($email) {
$emailaddress = md5($email);//xiaohudie.net
$url = 'http://www.gravatar.com/avatar/' . $emailaddress . '?d=404';//从gravatar处调用默认头像
$headers = @get_headers($url);
if (!preg_match("|200|", $headers[0])) {//进行匹配
$is_no_avatar = FALSE;//如果这个邮件地址没有生成默认头像,则判断为有头像用户
} else {
$is_no_avatar = TRUE;//反之则是没头像了
}
return $is_no_avatar;
}

然后在你调用评论排行的地方找到你的hook,类似foreach ($comments as $comment)
在后面加上
if (no_gravatar($comment->comment_author_email)) {
直到foreach结束处,再加上}
例子:

foreach ($wall as $comment)
if (no_gravatar($comment->comment_author_email)) {
{
$width = round(40 / ($maxNum / $comment->cnt),2);
if( $comment->comment_author_url )
$url = $comment->comment_author_url;
else $url="#";
$avatar = get_avatar( $comment->comment_author_email, $size = '36');
$result = '<li><a rel="nofollow" target=_blank class="no-ce" href="'.$comment->comment_author_url.'" title="'.$comment->comment_author.':'.$comment->cnt.'条评论">'.$avatar.'</a></li>';
$output .= $result;
}
}

大功告成!看看你的评论排行里是不是已经没有无头像的用户了?
no_gravatar这个function可以广泛运用在各个地方,比如最新评论等,你也可以调用此函数来实现:当无头像用户发表评论时进行申请头像建议或者直接禁止,这个花样就多, 慢慢折腾吧~

更新:解决排除无头像后评论条数不足的问题

评论中有童鞋问,如果设置了查询10条,排除了3个没头像的,会只显示7条,这个问题的解决方法是:
首先检查你的foreach前面是否有LIMIT,如果有,请删除(或者把数字改大一点)然后在foreach前加上$i =1;再在此循环末尾加入$i++; if($i>10) break;,如果看不懂,可以参考我下面的示例:

<?php
$query="SELECT COUNT(comment_ID) AS cnt, comment_author, comment_author_url, comment_author_email FROM (SELECT * FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->posts.ID=$wpdb->comments.comment_post_ID) WHERE comment_date > date_sub( NOW(), INTERVAL 124 MONTH ) AND user_id='0' AND comment_author_email != 'admin@example.com' AND post_password='' AND comment_approved='1' AND comment_type='') AS tempcmt GROUP BY comment_author_email ORDER BY cnt DESC LIMIT 20";
$wall = $wpdb->get_results($query); $maxNum = $wall[0]->cnt;
$i =1;
foreach ($wall as $comment) if (no_gravatar($comment->comment_author_email)) {
{
$width = round(40 / ($maxNum / $comment->cnt),2);
if( $comment->comment_author_url )
$url = $comment->comment_author_url;
else $url="#";
$avatar = get_avatar( $comment->comment_author_email, $size = '36', $default = get_bloginfo('wpurl').'/avatar/default.jpg' );
$tmp = '<li><a rel="nofollow" target=_blank class="no-ce" href="'.$comment->comment_author_url.'" title="'.$comment->comment_author.':'.$comment->cnt.'条评论">'.$avatar.'</a></li>';
$output2 .= $tmp;
$i++; 
if($i>10)//10改成你想要的数字
break;
} 
}
$output3 = "<ul class="readers-list">".$output2."</ul>";
echo $output3 ;
?>

这样一来,就不会有输出数量不足的问题了

42 Comments

Name *

E-mail *

Website

  1. 619影视

    俺是一个小白菜,也懒的改。本来博客留言人就少再把无头像的去掉,那评论墙可以去掉了!!

    • 小蝴蝶

      @619影视 : 哈哈哈 这个就留给人气旺的大大用了 我自己也没用

  2. SEO策略

    嘿嘿,看来这个还是比较有用的,下次搞个就直接禁止掉。。提示:此人无面目可言所以禁止在此评论。PS:我要进好人榜的说。。。。

    • 小蝴蝶

      @SEO策略 加油 榜上那几位是灌水大神 我都给他们跪了 哈哈

  3. 咚门

    哎,为什么我老是弄不对呢,一加上这个整个网页就卡住。

    • 萨龙龙

      @咚门 有同感,虽然效果很不错,去除了没有头像的读者,但确实太卡啊。

  4. 神父

    蝴蝶蝴蝶,有木有直接拒绝没有头像的访客提交评论,直接在functions.php里加代码就能解决的办法哦?

    • Johan

      @神父 发哥那里有一段,你可以去找找看。

    • 小蝴蝶

      @神父 排楼上~

  5. 郑永

    呵呵,时到今日,又用上了 :)

  6. 小兽

    正好用上,代码很好。