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

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

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

LIKE OR SHARE IT:

admin发表于Code目录下,标签为,转载请保留链接

TOP DOWN
发表评论

您必须 [ 登录 ] 才能发表留言!

  1. 沙 发 小林

    抢个沙发 :guzhang:

    三月 6, 2013 10:11:41
  2. 板 凳 哆略咪小调

    :smile: 赞一个,不过,我想问,右侧中foreach ($wall as $comment),$wall查出来的只有10条记录,其中有三条是没有头像的,这样展示的不是7条吗,这种情况怎么办。
    还有最新评论是使用插件来的吧?!
    呵呵,“看看右边头像对不对?”又如何实现。
    希望多多交流~~ :razz: :neutral:

    三月 6, 2013 10:25:12
  3. 地 板 不亦乐乎

    没有头像的评论我都是看心情丢垃圾评论里删除,即使放过的,也会因为后面心情而再次被删除,除非认识的。

    三月 6, 2013 10:46:59
  4. 地 毯 胡倡萌

    这个一直是我想要的功能,有时间一定要是试试

    三月 6, 2013 11:22:14
  5. 地 面 DruidFY

    我就没用评论排行….

    三月 6, 2013 11:41:08
  6. 地 下 airoschou

    看不起没头像啊 :evil: 没头像也是很大一部分人哦

    三月 6, 2013 13:25:46
  7. 7 楼 xsinger

    技术大女神啊!看来我来晚了,连板凳都没了! :kelian:

    三月 6, 2013 15:06:18
  8. 8 楼 郑永

    好啊,先收藏一下,下午折腾,哈哈 :) 不错不错。

    三月 6, 2013 23:03:27
  9. 9 楼 明修网络博客

    原来是个情侣博客。。我一眼就看出来哈 :razz:

    三月 7, 2013 21:34:18
  10. 10 楼 Android

    不会用啊5555 :ku:

    三月 11, 2013 12:53:57
  11. 11 楼 619影视

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

    三月 13, 2013 07:16:15
  12. 12 楼 SEO策略

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

    三月 21, 2013 13:23:17
  13. 13 楼 咚门

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

    十月 18, 2013 00:43:10
    • 萨龙龙

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

      1301室 十月 21, 2013 14:12:47
  14. 14 楼 神父

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

    三月 31, 2014 17:11:49