记得好久之前老郑提过这个问题(老郑你可是治我文荒的大救星啊),就是他边栏读者排行里有人刷评论(应该是垃圾评论),但他不希望没头像的人出现在排行榜里,所以问我有没有办法,我转身就给忘了,但是由于昨天一天没憋出来技术文,加上今天起的早,我研究了一下,找到了完美的解决方法!各位大大应该会很需要这个,从此垃圾评论再也不会上榜了~~~(有文章写了好鸡冻,所以多说一些废话)
首先在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 ; ?>
这样一来,就不会有输出数量不足的问题了
no-no-avatar is coded by http://xiaohudie.net. Any posts here is one hundred percent original, so please keep my link so as not to hurt this pretty girl. -
俺是一个小白菜,也懒的改。本来博客留言人就少再把无头像的去掉,那评论墙可以去掉了!!
@619影视 : 哈哈哈 这个就留给人气旺的大大用了 我自己也没用
嘿嘿,看来这个还是比较有用的,下次搞个就直接禁止掉。。提示:此人无面目可言所以禁止在此评论。PS:我要进好人榜的说。。。。
@SEO策略 加油 榜上那几位是灌水大神 我都给他们跪了 哈哈
哎,为什么我老是弄不对呢,一加上这个整个网页就卡住。
@咚门 有同感,虽然效果很不错,去除了没有头像的读者,但确实太卡啊。
蝴蝶蝴蝶,有木有直接拒绝没有头像的访客提交评论,直接在functions.php里加代码就能解决的办法哦?
@神父 发哥那里有一段,你可以去找找看。
@神父 排楼上~
呵呵,时到今日,又用上了 :)
正好用上,代码很好。