文章64
标签4
分类5

Gravatar头像问题总结

Gravatar头像遇到的问题做个总结

Gravatar头像简介

Gravatar是Globally Recognized Avatar的缩写,是gravatar推出的一项服务,意为“全球通用头像”(断断续续被墙)。如果在Gravatar的服务器上放置了你自己的头像,那么在任何支持Gravatar的blog或者留言本上留言时,只要提供你与这个头像关联的email地址,就能够显示出你的Gravatar头像来。

Gravatar问题

由于Gravatar的域名断断续续被墙而导致,头像碎了(无图)。而后多说(社会化评论评论框)服务商,提供了Gravatar回源的解决方案。但一段时间后由于多说用户群庞大或是带宽以及cdn问题导致多说延迟过高或无响应而导致博客加载慢,头像图片加载慢导致图碎或半天才下载完(以上说法不排除是极个别情况,或有些人没碰到过也是很正常的所以请勿以偏概全)。

解决方案

查找并替换get\_avatar函数位置
1.通过使用qistatic替换Gravatar
由于get\_avatar函数在每个主题中所在的位置不同,全依照作者设计的不同而位于不同位置所以就不提供实例。以下是通过在functions.php
添加Gravatar替换代码而实现的解决方法。基本WordPress通用。
位于以下位置
wp-contentthemes主题文件夹functions.php
WordPress后台–外观–编辑–模板函数 (functions.php)
以上两种方法都可以找到该文件。之后我们在其php文件里的最底部添加带码,记得要在(?>)之上哦。

//Gravatar头像使用云存储缓存 function dw\_get\_avatar($avatar) { $avatar = str\_replace(array("www.gravatar.com","0.gravatar.com","1.gravatar.com","2.gravatar.com"),"gravatar.qistatic.com",$avatar); return $avatar; } add\_filter( 'get\_avatar', 'dw\_get\_avatar', 10, 3 ); //结束

代码解释:
通过自定义函数dw\_get\_avatar,该函数通过str\_replace()字符串替换函数替换$avatar参数,再通过添加过滤器(filter)替换默认的get\_avatar函数。

gravatar.qistatic.com这个为个人使用的云存储CDN缓存但大家可使用除非博主另行通知否则一直有效。

2.通过七牛云存储替换Gravatar
首先需要一个七牛帐号,没有的请先注册。
点击注册七牛
当通过七牛的认证后就可以获得标准用户每月10GB流量和10GB空间。
通过以下方式新建空间使用:
gravatar-qiniu01

gravatar-qiniu02

新建空间名,为了易区分可以建为gravatar。

gravatar-qiniu03
设置镜像网址:可以设置为www.gravatar.com也可以设置为gravatar.duoshuo.com。
gravatar-qiniu04

gravatar-qiniu05
七牛的这个三级域名就是我们需要的地址,之后和上面一样的步骤:
WordPress后台–外观–编辑–模板函数 (functions.php)。将7nqvtv.csq.z0.glb.clouddn.com改成你的地址,这个地址是假的所以必须用你自己的。

//Gravatar头像使用云存储缓存 function dw\_get\_avatar($avatar) { $avatar = str\_replace(array("www.gravatar.com","0.gravatar.com","1.gravatar.com","2.gravatar.com"),"7nqvtv.csq.z0.glb.clouddn.com",$avatar); return $avatar; } add\_filter( 'get\_avatar', 'dw\_get\_avatar', 10, 3 ); //结束

3.多说缓存
已知多说的解决方案部分头像会被回源,导致无法显示。(自己注意下)
依旧functions.php文件

//Gravatar头像使用多说缓存 function dw\_get\_avatar($avatar) { $avatar = str\_replace(array("www.gravatar.com","0.gravatar.com","1.gravatar.com","2.gravatar.com"),"gravatar.duoshuo.com",$avatar); return $avatar; } add\_filter( 'get\_avatar', 'dw\_get\_avatar', 10, 3 ); //结束 4.本地缓存 依旧funtions.php文件的最后一个(?>)前

//Gravatar头像本地缓存 function my\_avatar($avatar) { $tmp = strpos($avatar, 'http'); $g = substr($avatar, $tmp, strpos($avatar, "'", $tmp) - $tmp); $tmp = strpos($g, 'avatar/') + 7; $f = substr($g, $tmp, strpos($g, "?", $tmp) - $tmp); $w = get\_bloginfo('wpurl'); $e = ABSPATH .'avatar/'. $f .'.jpg'; $t = 1728000; //设定为20天, 单位:秒 if ( !is\_file($e) || (time() - filemtime($e)) > $t ) { //当头像不存在或文件超过14天才更新 copy(htmlspecialchars\_decode($g), $e); } else $avatar = strtr($avatar, array($g => $w.'/avatar/'.$f.'.jpg')); if (filesize($e) < 500) copy($w.'/avatar/default.jpg', $e); return $avatar; } add\_filter('get\_avatar', 'my\_avatar'); //结束

在WordPress安装根目(即跟wp-content等文件夹同一目录下)下新建一个名为 avatar 的文件夹 ,设置该文件夹的权限为 0755 (如果 0755 不行,就试一下 0777)。放入一张同尺寸的头像图片命名为default.jpg

完整结束,关于第一个站长的云存储基本很快。但不保证用的人太多了站长扛不住,所以推选第二个自建七牛空间。

七牛官网

本文作者:寒喵
本文链接:https://moe.mwulu.com/cache-gravatar/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可