使用v2ex的CDN解决Gravatar头像加载问题(wordpress)

昨天换更了wordpress主题后发现Gravatar头像全都无法显示了,而且页面加载超慢!突然想起原来的主题是自带头像缓存功能的,所以没有出现这个问题;现在Gravatar在国内几乎是已经被墙的不能用了,要解决头像加载问题但又不想额外安装头像缓存类插件解决;只能自己动手将Gravatar头像换成从国内的镜像源加载;正好逛v2ex时发现它提供了 Gravatar的CDN服务,而且是针对国内和国外线路都是有优化的,而且还支持ssl访问,强烈推荐。

关于修改方法,百度了一下主要是如下2种方法:

  1. 修改wordpress基础程序 wp-includes/pluggable.phpget_avatar() 函数的变量$host的值指向新的加载地址,这是很彻底的从根本解决问题的方法;但是如果wordpress程序升级更新后,配置就会被还原!
  2. 在当前主题模版的函数模版 functions.php 中添加替换函数,然后用 add_filter()的方法调用替换函数将原本gravatar.com 的加载 url 替换成我们想要的 url 实现;只针对当前的主题模版有效,更换主题后配置失效;wordpress主程序更新升级不受影响!

这里我采用方法2进行修改

登陆wordpress的管理后台,选择 “外观” => “主题” => “编辑” 选择当前主题的函数模版文件 functions.php 在文件末尾添加如下的自定义函数和filter方法:

v2ex-Gravatar-CDN

第一次我直接copy百度上的代码后遇到一个坑,将头像获取地址修改为v2ex的cdn地址 http://cdn.v2ex.com/后刷新页面,所有的头像全部无法加载,页面调试发现头像获取全部404了!
Gravatar-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 获取加载头像,解决头像加载延迟导致页面显示缓慢的问题!

Last modification:November 30th, 2017 at 05:42 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment