Gravatar头像被墙解决方案(本站验证使用)

2014年11月27日 WordPress 1 次吐槽 10424次浏览
博客主机

最近网站显示的用户留言头像突然没了,经过查询是Gravatar头像被墙的原因。虽说启用了多说的插件,但是后台的工具条老是一个大的叉叉,网上提供的无非是缓存/插件/修改程序代码,但是弊端很大,缓存的方式肯定要占用不必要的服务器资源,修改程序代码的话,随着WordPress更新,每次都需要修改。

发现多说调用的头像可以正常显示,原来多说专门架设了一台Gravatar的中转服务器,为了节省带宽那么他必然要启用一定的缓存机制,那么WordPresser们的福音来了,只需短短几行代码就可以彻底告别Gravatar别墙的困扰。

完美解决方案

gravatar-wordpress

编辑当前主题的functions.php文件,在底部加入

//头像使用duoshuo缓存
function get_avatar_deadwood( $avatar ) {
  $avatar = preg_replace( "/http:\/\/(www|\d).gravatar.com/","http://gravatar.duoshuo.com",$avatar );
  return $avatar;
}
add_filter( 'get_avatar', 'get_avatar_deadwood' );

从来没有在多说上出现过的头像会有一小会的延迟,不过缓存之后根本感觉不到页面加载了大量头像了。

近来gravatar被封杀的越来越厉害,大家全部都把流量“送给”多说也有点不人道,其实我们还可以用其他的第三方缓存例如https://ruby-china.org 和 https://cdn.v2ex.com/gravatar/(前缀不一致,需修改代码),另外官方的http://cn.gravatar.com 和 https://secure.gravatar.com 也都是可用的,速度尚可。

后台默认头像显示叉叉的解决办法

加入上面的代码后,前台的用户头像都是正常显示的,但是后台的只显示非默认头像,不显示默认的头像,如果你没有强迫症的话不用继续往下看了,导致这个问题的原因是WordPress后台默认头像强制设置成了mystery,并且这个参数似乎没有办法用钩子替换。

打开wp-includes/pluggable.php文件,你可以找到这样一段代码

if ( 'mystery' == $default )
	$default = "$host/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}"; // ad516503a11cd5ca435acc9bb6523536 == md5('unknown@gravatar.com')

这段代码的意思是如果默认头像是mystery,那么就用unknown@gravatar.com邮箱的头像,我不知道这么奇葩的写法究竟用意何在,而且一路更新下来,这段代码依然健在。

实际上如果按照gravatar官方文档来说mystery(神秘人)头像作为默认头像的调用写法应该是这样的

http://cn.gravatar.com/avatar/07b979c71a73f11087a78102b320fe14?s=32&d=mystery&r=G&forcedefault=1

而Wordpress给我生成的是这样的

http://cn.gravatar.com/avatar/07b979c71a73f11087a78102b320fe14?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G&forcedefault=1

如果用户没有自定义头像,它就会跳转到0.gravatar.com去,但是这个域名在大陆已经死透了,所以它显示了一个叉叉给我们。

解决办法也很简单,删除了它也可以(注意下一行的elseif要改成if),修改一下废了它也行,例如让$default等于mystery或者mm(简写)。

if ( 'mystery' == '2B' )
	$default = "$host/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}"; // ad516503a11cd5ca435acc9bb6523536 == md5('unknown@gravatar.com')

如果不想修改源文件或者害怕更新后被覆盖,可以将上面加入functions.php的函数修改为

//头像使用duoshuo缓存
function get_avatar_deadwood( $avatar ) {
    $avatar = preg_replace( "/http%3A%2F%2F\d.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D\d+/","mm",$avatar );
    $avatar = preg_replace( "/http:\/\/(www|\d).gravatar.com/","http://gravatar.duoshuo.com",$avatar );
    return $avatar;
}
add_filter( 'get_avatar', 'get_avatar_deadwood' );

 

1 条留言  访客:0 条  博主:0 条

  1. 想找章泽天照片去淘宝找最容易了

博客主机

给我留言