您现在的位置:爱折腾>> wordpress>>正文内容

wordpress读者墙排除无gravatar头像

如题,以前就想折腾这个效果,问了N个wordpress控,回答都一致,无法判断。可能大家都不在乎这个,自从认识了小蝴蝶,觉得她是技术达人,那天一问,先是觉得不可行,接着说用css可以实现,但是css效果肯定不理想,于是昨天,小蝴蝶用代码实现了这个效果,小蝴蝶威武!

长话短说,主要是因为没有头像的读者上了排行版,那道墙看上去有点不尽人意,因为大部分没有头像而长期来评论的人都是来做广告的,本站最恨就是机器刷广告还带链接的,而如果是人工评论我不屏蔽,但不带链接就ok,因为有的人虽然是来做广告的,但是评论却都是一针见血,这样的宣传者欢迎吐槽,但是我的排行版考虑到美观,所以才会出此之策。

其实当初为了维护读者墙页面,我的读者墙是用代码输出全部留言用户,然后再复制到离线编辑器,删掉没有头像的,然后直接发布页面,这样做的优点就是不用查询数据库,防止一些刷评论的进入这个页面(那时把这个页面当做友情链接使用),还可以把没有头像的给排除掉,缺点就是无法及时更新非刷评论的读者,排行版更新得手动再次编辑,太麻烦了,哈哈。

在请教的过程中,phoetry就弄过一个检查评论者头像,无头像不能评论的功能,主要折腾的还是判断有无gravatar头像,但那段代码很明显用在读者墙是行不通的,好了,废话不多说,下面分享小蝴蝶折腾出来的方法!

首先function里加如下代码:

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

然后到你的读者墙代码页,下面是我的读者墙代码:

<?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 ;
?>

效果如下:

allreaders

参考你自己的读者墙代码,把红色那几行代码粘贴到你的代码相应位置,OK,那些没头像的读者瞬间在排行版里消失了,如果不懂,可以去小蝴蝶那里看原文,并提出问题。

相关文章