最近wordpress默认使用的Gravatar头像地址又被墙了,虽然不影响blog页面的正常访问,不过对于一个处女座的人是容不下这点瑕疵的。以下总结了几种针对该问题的解决方法。

方法1:更换gravater地址

通过查找gravater的地址,共找到了以下地址:

http://www.gravatar.com
http://0.gravatar.com
http://1.gravatar.com
http://2.gravatar.com
http://gravatar.com
http://cn.gravatar.com
https://secure.gravatar.com

测试发现前四个地址已经被和谐了,后面三个还可以访问。所以最简单的方法就是将wordpress默认的gravatar服务器修改为后面三个。打开wordpress程序根目录的wp-includes文件夹,找到pluggable.php打开,将大约2150至2157行:

 1if ( is_ssl() ) {
 2    $host = 'https://secure.gravatar.com';
 3} else {
 4    if ( !emptyempty($email) )
 5        $host = sprintf( "http://%d.gravatar.com", ( hexdec( $email_hash[0] ) % 2 ) );
 6    else
 7        $host = 'http://0.gravatar.com';
 8}
 9
10替换为:
11
12$host = 'https://secure.gravatar.com';
1314$host = 'http://cn.gravatar.com';

不过该方法美中不足就是当wordpress进行更新,会将该文件覆盖。界时需要再手工改一次。

方法2:使用https方式(SSL)调用Gravatar头服务器地址

使用https方式(SSL)调用Gravatar头服务器地址需要将下面代码添加到主题functions.php文件中:

1function get_ssl_avatar($avatar) {
2   $avatar = preg_replace('/.*\/avatar\/(.*)\?s=([\d]+)&.*/','<img src="https://secure.gravatar.com/avatar/$1?s=$2" class="avatar avatar-$2" height="$2" width="$2">',$avatar);
3   return $avatar;
4}
5add_filter('get_avatar', 'get_ssl_avatar');

使用该方法可能会造成头像缓存插件失效。

方法3:使用第三方法服务器中转

国内常用的有七牛、多说等,这里以多说为例,在当前主题functions.php文件中添加如下代码:

1function mytheme_get_avatar( $avatar ) {
2$avatar = preg_replace( "/http:\/\/(www|\d).gravatar.com/","http://gravatar.duoshuo.com",$avatar );
3return $avatar;
4}
5add_filter( 'get_avatar', 'mytheme_get_avatar' );

多说服务的稳定性且不说,之前使用过多说的评论插件,感觉不是甚好。

方法4:插件

以Gravatar Fixed 头像修正插件为例,插件设置页面,将Gravatar 服务器和Gravatar SSL 服务器,全部改为:https://secure.gravatar.com或http://cn.gravatar.com。

插件多了的话,速度自然不感觉恭维,如果你也玩了wp N久了这点不说自明吧。啰嗦了一大堆,还是推荐方法1 。