最近Gravatar头像被墙,导致绝大部分wordpress博客都受到此影响,加载非常的缓慢,小z博客之前分享过一篇《开启Gravatar头像缓存,解决WordPress加载缓慢》的教程,后来发觉并不算很完善,经过几天的分析后用这篇文章做个总结,希望对大家有帮助。
方法一、gravatar-fixed插件
先来最简单的办法,直接使用gravatar-fixed插件就可以对Gravatar头像进行缓存,这个插件由WPCEO出品功能是修正Gravatar服务器无法正常访问的情况,并且可以自定义Gravatar服务器地址。小z已经启用默认的缓存服务器0.bsdev.cn,所以安装此插件后无需额外的设置便能感受到速度的提升,非常适合新手。
点此下载:gravatar-fixed.zip
方法二、使用小z博客提供的缓存(推荐)
小z博客在忍受Gravatar头像被墙的痛苦后,利用自己的海外服务器反代了Gravatar头像,并且使用了七牛云存储的加速服务,免费提供给各位网友使用,只需将下面的代码添加到主题目录的functions.php中即可体验到加速。
//Gravatar缓存头像
function xiaoz_get_avatar($avatar) {
$avatar = str_replace(array("www.gravatar.com","0.gravatar.com","1.gravatar.com","2.gravatar.com"),
"0.bsdev.cn",$avatar);
return $avatar;
}
add_filter( 'get_avatar', 'xiaoz_get_avatar', 10, 3 );
//缓存头像END
方法三:缓存到本地(海外主机用户使用)
在前一篇文章中小z也分享过此方法,但是忽略了个重要的问题是Gravartar被墙,国内主机是无法缓存到本地的,所以此方法仅适用于海外主机的用户,如果你的海外主机速度不够快建议使用方法一或方法二。
1.在网站根目录新建一个名为avatar的文件夹。(权限改为755或777),部分VPS用户需要将用户组修改为www
2.新建默认的头像图片,名为default.jpg并放入avatar文件夹中。
3.将以下代码加入到当前使用的主题的functions.php文件中。
function v7v3_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 = 1209600; //设定还缓存时间14天,单位为秒
if ( !is_file($e) || (time() - filemtime($e)) > $t ) { //头像超过设定时间或不存在则更新
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', 'v7v3_avatar');
方法四:关闭头像功能
这个做法显得有些极端,但却有效,对要求不是特别高而又不想折腾的用户可以在后台->设置->讨论->将头像显示的勾去掉即可,这样速度就杠杠的啦。
目前可用的缓存服务器有0.bsdev.cn(由小z博客提供),cd.v7v3.com(由V7V3提供),当然了可能还有更多,使用同一个缓存服务器的用户越多那么二次加载的时候就越快。
特别提醒:使用多说的朋友注意了,多说本身有自己的缓存服务器,但是不知什么原因,多说最近很多头像回源了(向官方反应,但是没有收到任何结果),因此使用多说的朋友也会感觉到加载缓慢,表现为部分头像回源后无法加载,如下截图。另外上面的所有方法对启用多说的用户均不能奏效,必须停用多说才能起到作用,暂时还没想到两者并存的方法(没办法,小z也用回自带评论了),还请见谅。
直接整站https, 就不用做任何处理啦
为什么我本地缓存弄好以后其他人的头像都没问题,
我自己的头像不管怎么在Gravatar官网改,
在我自己的网页上都显示的都是那个传到avatar文件里默认的default.jpg头像…
好纠结。。。
因为gravartar被墙缓存到自己服务器的话只有海外主机适用,另外你清除下浏览器缓存试试呢。
使用 HTTPS 的 gravator ,加入以下代码到当前Wordpress主题的functions.php文件中:
感谢您提供的新方法
我是把http换成了https。。。
哎,天朝~
嗯,目前https的链接还可以用。
非常感谢楼主的方法!gravatar-fixed插件感觉很不错
gravatar-fixed非常的方便,直接启用即可。
是的。唯一纳闷的是,目前网络上的更改Gravatar头像地址的方法对多说插件的最近访客小工具均无效。很郁闷
嗯呢,我也发现了,而且最近多说部分头像还被回源了,如果使用了多说上面的代码仅对后台生效。
我现在用gravatar-fixed插件,输入的多说的gravatar地址。
我向多说的人反映这个情况,他们还爱答不理的。
我并不建议你输入多说的缓存地址,因为有些根本缓存不了,我也向多说反应了,毫无回应。
额。看看以下代码 会不会有什么想法
不知道我的网站头像是不是正常显示,用的还是很久以前的willin kan的代码
我看了一下,你的是缓存到本地,成功了的。
国内主机有没有办法既缓存在服务器,又换成你那链接的?你那个是直接用七牛镜像了gavatar官网吧?
国内主机无法建立缓存,直接被墙了,我的那个缓存服务器不是七牛直接镜像的(貌似七牛直接镜像也有压力),我是利用自己的海外服务器反向代理了Gravatar,然后再用七牛镜像这台服务器,不仅减轻了服务器压力,还拥有了多个CDN加速,所以可以放心使用。
哈哈,好厉害的想法,妥妥的用了这个!的确,七牛估计在墙内,想要直接镜像gravatar也会比较难。
另外贵站加载了谷歌字体,导致加载缓慢。不知你是使用的国内主题还是国外主题呢?通常情况下这个方法能够解决:http://www.xiaoz.me/archives/3335,如果此方法还行不通就得从源码入手了。
诶,我貌似在后台禁用了的啊,没成功么?
没有成功,用F12帮你查看了一下。可能是由于主题的原因,看来得从源码中来找了,可以加我QQ:337003006
小z兄弟一直这么热心。
看起来不错~