昨天有博主说我的网站访问慢,我很奇怪,我的网站是使用了缓存的,一般都是秒开的,怎么会反应慢呢?结果一看果然是,最后究其原因是由于Gravatar头像0.gravatar.com host被屏蔽了,所以导致gravatar的头像无法加载,最终导致我们的Wordpress网站加载缓慢。据我所知,同样受到困扰的还包括WordPress存储静态文件的s.wordpress.org缓存服务器,以及jQuery的code.jquery.com等。那么有没有解决方法呢?如果你使用Wordpress自带的评论方法,那么解决方法是有的。
官方Gravatar的头像所在的路径一般都是www.gravatar.com、0.gravatar.com、1.gravatar.com、2.gravatar.com,这次被屏蔽的就是0.gravatar.com,所以我们只需要把这些头像默认的URL换成多说的host就可以了,因为多说在gravatar之间建立了一个中继器,也就是一份镜像,但是多说是可以访问的,所以这种方法是可行的。
打开主题下的functions.php 文件,将以下代码复制粘贴保存即可:
//多说官方Gravatar头像调用 function mytheme_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', 'mytheme_get_avatar', 10, 3 );
这样,Gravatar头像的外链地址已经全部到了多说的国内服务器了。
这款插件的原理也是将Gravatar 的host替换国内能够访问的host,Gravatar Fixed插件可以通过函数覆盖的方式,重新自定义Gravatar服务器,直接读取www.gravatar.com 的内容,保证正常访问。当然,假如Gravatar将来提供了国内的镜像(或者有热心网友自行搭建),也可以将地址修改为国内服务器,比如多说的服务器地址,以提高速度。
如果你的网站是使用了SSL证书的,应该就不存在这样的问题,但是大多数网站是没有使用SSL证书的,因此可以加入如下的代码到function.php解决Gravatar头像在Wordpress中无法显示的问题。
//官方Gravatar头像调用ssl头像链接 function get_ssl_avatar($avatar) { $avatar = preg_replace('/.*\/avatar\/(.*)\?s=([\d]+)&.*/','',$avatar); return $avatar; } add_filter('get_avatar', 'get_ssl_avatar');
以上都是说的使用Wordpress自带的评论无法显示头像的问题,但是很多朋友使用的是多说的评论,或者使用的是多说的读者墙,这样也会显示头像无法加载的错误,那么这种方法造成的原因是我们加载的是多说的第三方代码,但是返回给我们的代码还是被和谐了的host,因此我们博客的Gravatar头像显示不正常,多说官方给的说法是:
本地没有的头像,多说需要先访问gravatar,由于gravatar访问慢导致多说服务器有大量阻塞,所以我们暂时关闭了缓存直接访问gravatar,我们正在设计国内通用头像系统哦,敬请期待。
所以如果使用多说评论造成Gravatar头像无法显示的,我们就只有期待多说的服务器返回给我们正确的或者说没有被屏蔽的Gravatar官方Host了。