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代码完成操作,很容易的:
                  请尽量在空闲时,采取有备份的修改,防止不必要的杯具!

  1. 在WP根目录新建文件夹 /avatar  ,赋予权限 755;
  2. 找一个默认头像default.jpg 放在文件夹里面,必做~否则没Gavartar头像的朋友无法显示。
  3. 找到主题  wp-content/themes/elegant-box/functions.php
    搜索"get_avatar" 定位到要修改的地方,没有的话在comments.php里面找;
  4. 将原来<? get_avatar ?> 一大片之间的部分注释掉 更改为上面的版本。
  5. 注意:缓存头像大小  因主题而异,我使用的是  ?s=34
    配以CSS限制大小即可;
  6. 在适当的位置添加上,头像引用代码
    <div ><img class="userpic" src="<? echo $a ?>" alt="avatar" /></div>
    这个因人而异,我直接添加在上面代码的尾部了;
  7. 测试成功,开始解决wp-thread-comment 插件部分的回复头像问题,以及 wp-recentcomments 插件侧边栏调用头像问题;
  8. 直接修改 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 中的,故你会得到一个美丽的 红叉叉 头像!
解决办法:信哥哥,但愿遇不到这样的访客!  手动提交吧~~~汗!

下次有空解决它,集成代码到函数中,期待啊!
下面是传送门:

迷你版 gravatar 头像缓存

WordPress 2.7+主题 gravatar 头像缓存

版权所有© HzlzH | 本文采用 BY-NC-SA 进行授权
转载需注明 转自: 《Gravatar头像本地缓存|修改get_avatar()函数

随机文章

13 Comments.
  1. 我觉得缓存这个无端加重服务器负载,就不弄了,哈哈 :roll:

  2. 以前听说过,一直没折腾,板凳

  3. 哈哈,说干就干,你已经搞定 :wink:

  4. 同样觉得增加负载,没搞

  5. 呵呵 没有过这样的想法,估计不会墙了这个吧。

  6. 我也是用的这个方法! :mrgreen:

  7. 嗯,不错,我也在折腾我的wp呢

  8. :-P :-x 我也要弄个头像!

  9. 太感谢了 可惜现在用不上哈 :cry:

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

[ Ctrl + Enter ] Typed 0 Words 订阅评论Feed

Trackbacks and Pingbacks: