趁清明小长假的时候,我折腾了非插件实现 WordPress 显示 QQ 自定义头像的功能,并且同时实现 Gravatar 头像缓存,让 Gravatar 头像与 QQ 自定义头像两者共存。很是可惜,还有那么一小小小部分没能完美实现,因为我是个完美主义者,一定要追求最完美的表现方式,所以不完美的方法我也不写了。今天还在研究此功能的时候,无意中发现,居然已经有高手折腾出来了,佩服佩服,不过对我来说还不是很完美,有兴趣的朋友可以先试试啦。
方法:
1、在对应地方(这里是wp-content/cache/img)建立权限755的文件夹,放上默认头像
2、在主题 functions.php 里面添加以下代码(<?php ?>之间的部分)
add_filter('get_avatar', 'cache', 10, 3);
function cache($avatar, $comment, $size){
$t = 604800; //設定7天, 單位:秒
$d = get_bloginfo('wpurl').'/wp-content/cache/img/default.jpg';//默认图片
$face_size = false;//单独指定头像的大小, false or integer
$qq_face_url = 'http://qun.qq.com/cgi/svr/face/getface?type=1&uin=%s';
//QQ头像地址, %s表示QQ号
if ( isset($comment->comment_author_url) && preg_match
('/^(http:\/\/)?[1-9][0-9]*$/i', $comment->comment_author_url) ) {
$qq = preg_replace('|\D*|', '', $comment->comment_author_url);
$avatar = preg_replace('/src=\'[^\']*\'/',
'src=\'' . str_replace('%s', $qq, $qq_face_url) . '\'',
$avatar);
if( $face_size )
$avatar = str_replace('\'' . $size . '\'', '\'' . $face_size . '\'', $avatar);
return $avatar;
}
else{
$f = md5(strtolower($comment->comment_author_email));
$r = get_option('avatar_rating');
$g = 'http://www.gravatar.com/avatar/'.$f.'?s=50&d='.$d.'&r='.$r;
$a = get_bloginfo('wpurl').'/wp-content/cache/img/'.$f.'.jpg';
$e = ABSPATH .'/wp-content/cache/img/'.$f.'.jpg';
if ( !is_file($e) || (time() - filemtime($e)) > $t ){
copy($g, $e);
@chmod($e,0777);
if (filesize($e) < 500) {
copy($d, $e);
}
}
if( $face_size )
$size = $face_size;
$avatar = "<img src='{$a}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
return $avatar;
}
return $avatar;
}
function cache($avatar, $comment, $size){
$t = 604800; //設定7天, 單位:秒
$d = get_bloginfo('wpurl').'/wp-content/cache/img/default.jpg';//默认图片
$face_size = false;//单独指定头像的大小, false or integer
$qq_face_url = 'http://qun.qq.com/cgi/svr/face/getface?type=1&uin=%s';
//QQ头像地址, %s表示QQ号
if ( isset($comment->comment_author_url) && preg_match
('/^(http:\/\/)?[1-9][0-9]*$/i', $comment->comment_author_url) ) {
$qq = preg_replace('|\D*|', '', $comment->comment_author_url);
$avatar = preg_replace('/src=\'[^\']*\'/',
'src=\'' . str_replace('%s', $qq, $qq_face_url) . '\'',
$avatar);
if( $face_size )
$avatar = str_replace('\'' . $size . '\'', '\'' . $face_size . '\'', $avatar);
return $avatar;
}
else{
$f = md5(strtolower($comment->comment_author_email));
$r = get_option('avatar_rating');
$g = 'http://www.gravatar.com/avatar/'.$f.'?s=50&d='.$d.'&r='.$r;
$a = get_bloginfo('wpurl').'/wp-content/cache/img/'.$f.'.jpg';
$e = ABSPATH .'/wp-content/cache/img/'.$f.'.jpg';
if ( !is_file($e) || (time() - filemtime($e)) > $t ){
copy($g, $e);
@chmod($e,0777);
if (filesize($e) < 500) {
copy($d, $e);
}
}
if( $face_size )
$size = $face_size;
$avatar = "<img src='{$a}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
return $avatar;
}
return $avatar;
}
本方法转自:http://u.wange.im/04,原作者还提供了 QQ 头像缓存的方法:http://u.wange.im/05,不过经作者测试发现获取 QQ 头像(尤其是自定义头像)与网速和服务器有很大关系,错误的话经常返回默认头像。
我暂且没有使用这个方法,只是转载过来作为收藏,等我有空再来修改成为适合我用的完美版,最近太忙了,实在没时间,以至于只能靠转载来弥补我的文囧,请读者和搜索引擎原谅我吧~
-
Wordpress gravatar 头像缓存补充说明2010年01月19日 -
Wordpress 侧边栏带头像的最新评论2009年12月26日 -
Wordpress 免插件读者墙修订版2009年12月1日 -
Wordpress 2.7+主题 gravatar 头像缓存2009年11月13日
这里的头像挺丰富的嘛
看得晕乎乎地,
最新一直打不开,不知道是怎么回事。
难道被天朝和谐了~~~~
各位帮我测试下
看来我也要设置一个了,公司上了新的网络设备,Gravatar 上不去了
。。。那你打开任何有gravatar头像的页面都一定超慢了
被你不幸言中。
呵呵,那是肯定的,因为服务器不断在gravatar上读取读取再读取
u.wange.im/xx是啥,你的短网址?
恩啊,我的urlshort,嘿嘿,可以玩玩哈
呵呵,收藏一下,最近木有时间鸟 ~
小邪三天才来一次,我就知道你忙着呢
折腾~
这样一来,换头像就方便啦?对吗
里面一直在改,有很多严重的问题!!!
我想买卡王,如何联系你,我QQ:2465889
老大,我想买卡王,可以找你不,谢谢
不好意思啊,我已经洗手不干了
z-blog落伍了么,都很少写这个。
期待你的作品,嘿嘿...
向雷锋同志学习
嗯 ,以前没有注意到,通过 add_filter实现头像缓存很好,这样就不用修改wp本身的文件了,不过修改wp本身的文件效率更高,呵呵,就是有点麻烦。
这不是砼砼早些时候折腾的那个?
恩,是哒,我就顺手拿过来了
你太邪恶 不崇拜不行
显示QQ头像,创意不错啊。。。
呵呵,只要想的到,就做的到~
用QQ头像是比较好的!
可惜还没有找到最完美的方法呢
天天折腾,你还真有活力
我有活力,博客才能有生命力嘛
其实QQ秀也能抓出来的,要不折腾下也
抓出来用在哪里好呢,呵呵
短网址就这么用上了。。。看上去全是你自己的了。。。
短网址用着方便,嘿嘿,我太邪恶了
看出来了
一上你的博客就忍不住想折腾。。。
哈哈,那好呀,被我感染了
又一个wp折腾人的招数
不折腾无WP嘛
我说咋看着这么眼熟。。。
因为腾讯获取自定义头像的地址不稳定,经常返回默认头像,所以不用了
就是你那里转载过来的,HOHO
我这个图片没有显示哇。
我没有用上呢。。。
换个邮箱看看。
测试一下。
好东西哇。期待。
头像缓存问题的确得搞,不然速度有很大影响。
gravatar缓存问题最近也是让我很头疼,Z-Blog上不知道怎么解决。
抛弃zblog吧,投身WP的怀抱
好吧,原谅你了。等你搞出完美的出来
真是杯具,gr里面每次刷你的都造成gr崩溃……
。。。这个问题还没解决啊
那天测试了一下,很不错的
哎沙发好难抢,万戈 让我膜拜一下!
这个拿来干啥呀~~
其实我也没有看明白!老万的错!
专门拿来折腾的。。。
其实你不必折腾这个了,你的“大眼脸”挺好看的了
以前用过缓存头像,这个会不会有冲突哦?
本文就是解决冲突的办法
能不能仅在没Gravatar的时候才显示QQ头像哦?
还没研究出来这功能。。。
我要把这个做成插件,国内读者为主的话确实qq比G通用多了
期待你的完美版,我实在没时间折腾,靠你了,大虾
等你的好消息
我觉得影响不大……
我们是习惯用gravatar了,对于国内普通用户来说,还是QQ更普遍
那没有Gravat头像时就显示QQ头像吗?
不是的,是没有网址,选填QQ号时,则显示QQ头像
貌似博客圈里我是惟一一个用QQ做头像的人吧
我也是啊
额,我说的貌似有点不清楚,就是QQ这家伙,我是唯一用的,你用的是大眼脸...
大。。。大。。。大眼脸
这个词我要记下来!大..眼..脸...!
我要抹杀这条评论
大眼脸!~~~~
多帅的一张脸
大眼脸
等你调试好了,我也坐等完美版的
最近没时间咯,估计也要等到周末看有没有时间折腾
只能显示腾讯的那些个默认头像吧。。。
不是的哦,可以显示自定义的头像
我没发现你QQ在哪里实现啊
我只在本地测试用上了
你什么时候也搞这东西了?
上周刚开始折腾呢
不对啊。。怎么自己加上http了……
睾科技没错啊
测试功能
晕 都太快了 果然睾科技
沙发!
真是不好意思啊。。。。
没了沙发 然后看文章吧
其实你离沙发已经很近了
我靠,高科技阿!
你每次出来的都是高技术,WP被你做成了百宝箱了,什么都装下了。
强大!膜拜一下。
呵可,这不是我的技术,只是拿来主义