昨天换更了wordpress主题后发现Gravatar头像全都无法显示了,而且页面加载超慢!突然想起原来的主题是自带头像缓存功能的,所以没有出现这个问题;现在Gravatar在国内几乎是已经被墙的不能用了,要解决头像加载问题但又不想额外安装头像缓存类插件解决;只能自己动手将Gravatar头像换成从国内的镜像源加载;正好逛v2ex时发现它提供了 Gravatar的CDN服务,而且是针对国内和国外线路都是有优化的,而且还支持ssl访问,强烈推荐。
关于修改方法,百度了一下主要是如下2种方法:
- 修改wordpress基础程序
wp-includes/pluggable.php
中get_avatar()
函数的变量$host
的值指向新的加载地址,这是很彻底的从根本解决问题的方法;但是如果wordpress程序升级更新后,配置就会被还原!- 在当前主题模版的函数模版
functions.php
中添加替换函数,然后用add_filter()
的方法调用替换函数将原本gravatar.com 的加载 url 替换成我们想要的 url 实现;只针对当前的主题模版有效,更换主题后配置失效;wordpress主程序更新升级不受影响!
这里我采用方法2进行修改
登陆wordpress的管理后台,选择 “外观” => “主题” => “编辑” 选择当前主题的函数模版文件 functions.php
在文件末尾添加如下的自定义函数和filter方法:
第一次我直接copy百度上的代码后遇到一个坑,将头像获取地址修改为v2ex的cdn地址 http://cdn.v2ex.com/后刷新页面,所有的头像全部无法加载,页面调试发现头像获取全部404了!
仔细检查终于发现了问题
- v2ex的cdn的访问地址是:
http://cdn.v2ex.com/gravatar/
- wordpress默认的Gravatar获取地址:
http://*.gravatar.com/avatar/
除了主机名不一样,后面的访问目录路径也是不同的;从百度copy的代码函数中的preg_replace()
仅仅只替换了主机名称,没有替换到后面的目录名称,需要将默认的目录 avatar 也要替换为 gravatar 才能正常获取头像;所以最终我将代码修改成了如下样子,成功实现从 http://cdn.v2ex.com/gravatar
获取头像!
// 替换Gravatar为v2ex头像源
function mytheme_get_avatar( $avatar ) {
$avatar = preg_replace("/http:\/\/(www|\d).gravatar.com\/avatar\//","http://cdn.v2ex.com/gravatar/",$avatar);
return $avatar;
}
add_filter('get_avatar', 'mytheme_get_avatar');
将以上代码添加到主题 functions.php
文件的末尾保存,即可实现通过v2ex的高速 Gravatar CDN 获取加载头像,解决头像加载延迟导致页面显示缓慢的问题!
2 comments
为什么我换了后好像还是从ravatar.com获取的呢
[...]使用v2ex的CDN解决Gravatar头像加载问题 - 神奇的实验室 var live2d_Path = "https://www.iamyourfather.cn/wp-content/plugins/Poilive2d/live2d/model/pio/";var message_Path = "https://www.iamyourfather.cn/wp-content/plugins[...]