Gravatar头像本地缓存|修改get_avatar()函数
终于有空折腾WP了,这几天慢慢来,一项一项,先搞定了Gravatar头像本地缓存。
缓存的好处不言而喻,更何况是在如今 啬越来越厚的时代!
结合了 老万 等人的方法,传送门在结尾处~
使用代码:
comment_author_email));
$a = get_bloginfo('wpurl') .'/avatar/'.$f.'.jpg';//头像URL
$e = ABSPATH . 'avatar/'.$f.'.jpg';
$t = 1209600; //设定再缓存间隔14天, 单位:秒
$d = get_bloginfo('wpurl'). '/avatar/default.jpg';
if ( !is_file($e) || (time() - filemtime($e)) > $t ){//当头像不存在或文件超过14天才更新
$r = get_option('avatar_rating');
$g = 'http://www.gravatar.com/avatar/'.$f.'?s=34&d='.$d.'&r='.$r;//头像获取地址,S=头像尺寸
copy($g, $e);//拷贝到本地,一般主机都支持这个函数
}
if (filesize($e) < 500) {copy($d, $e);
}
?>
HzlzH 修改步骤使用的是mini代码完成操作,很容易的:
请尽量在空闲时,采取有备份的修改,防止不必要的杯具!
- 在WP根目录新建文件夹 /avatar ,赋予权限 755;
- 找一个默认头像default.jpg 放在文件夹里面,必做~否则没Gavartar头像的朋友无法显示。
- 找到主题 wp-content/themes/elegant-box/functions.php
搜索"get_avatar" 定位到要修改的地方,没有的话在comments.php里面找; - 将原来<? get_avatar ?> 一大片之间的部分注释掉 更改为上面的版本。
- 注意:缓存头像大小 因主题而异,我使用的是 ?s=34
配以CSS限制大小即可; - 在适当的位置添加上,头像引用代码
<div ><img class="userpic" src="<? echo $a ?>" alt="avatar" /></div>
这个因人而异,我直接添加在上面代码的尾部了; - 测试成功,开始解决wp-thread-comment 插件部分的回复头像问题,以及 wp-recentcomments 插件侧边栏调用头像问题;
- 直接修改 wordpress 的 get_avatar 函数代码,找到 wp-includes/pluggable.php
搜索:定位"function get_avatar",开始修改:
本着可还原的改动,我只是复制性修改或用"//"注释掉不需要的;
if ( is_ssl() )
$host = 'http://www.hzlzh.com';
else
$host = 'http://www.hzlzh.com';
if ( 'mystery' == $default )
$default = "$host/avatar/default.jpg"; // ad516503a11cd5ca435acc9bb6523536 == md5('unknown@gravatar.com')
// $default = "$host/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}"; // ad516503a11cd5ca435acc9bb6523536 == md5('unknown@gravatar.com')
elseif ( 'blank' == $default )
$default = includes_url('images/blank.gif');
elseif ( !empty($email) && 'gravatar_default' == $default )
$default = '';
elseif ( 'gravatar_default' == $default )
$default = "$host/avatar/s={$size}";
elseif ( empty($email) )
$default = "$host/avatar/?d=$default&s={$size}";
elseif ( strpos($default, 'http://') === 0 )
$default = add_query_arg( 's', $size, $default );
if ( !empty($email) ) {
$out = "$host/avatar/";
$out .= md5( strtolower( $email ) );
// $out .= '?s='.$size;
$out .= '.jpg';
// $out .= '&d=' . urlencode( $default );
$rating = get_option('avatar_rating');
if ( !empty( $rating ) )
// $out .= "&r={$rating}";
之后,get_avatar 函数就会开始调用我们 本地站点路径的头像了!
PS:目前大家使用的本地缓存,如果没有将copy()函数写在 get_avatar里面,都是有bug的
BUG触发条件:当一个全新的访客使用新email 在博客 回复 他人留言时![注意:是回复不是直接留言]这时候调用的是wp-thread-comment 中代码,而初次缓存代码是写在 主题下的 functon.php 中的,故你会得到一个美丽的 红叉叉 头像!
解决办法:信哥哥,但愿遇不到这样的访客! 手动提交吧~~~汗!
下次有空解决它,集成代码到函数中,期待啊!
下面是传送门:
WordPress 2.7+主题 gravatar 头像缓存

我觉得缓存这个无端加重服务器负载,就不弄了,哈哈
@kangzj 每天缓不了几张头像的,老去刷人家Garvatar的资源,总觉得卡
以前听说过,一直没折腾,板凳
哈哈,说干就干,你已经搞定
@万戈 那必须啊,你就没空集合一下,所谓一劳永逸嘛
同样觉得增加负载,没搞
@阿吴 这负载都扛不住,我立马换主机,嘿嘿
呵呵 没有过这样的想法,估计不会墙了这个吧。
我也是用的这个方法!
嗯,不错,我也在折腾我的wp呢
太感谢了 可惜现在用不上哈