Gravatar头像被墙完美解决方案

46

最近朽木所在的电信商把0.gravatar.com给墙J了,虽说启用了多说的插件,但是后台的工具条老是一个大的叉叉,网上提供的无非是缓存/插件/修改程序代码,但是弊端很大,缓存的方式肯定要占用不必要的服务器资源,修改程序代码的话,随着Wordpress更新,每次都需要修改,朽木之前就是手动修改成了www.gravatar.com,参见Gravatar头像分流服务被墙的纠结,但是被更新包覆盖掉了。

朽木发现多说调用的头像可以正常显示,原来多说专门架设了一台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' );

从来没有在多说上出现过的头像会有一小会的延迟,不过缓存之后凭借着不到20MS的服务器速度,根本感觉不到页面加载了大量头像了。

近来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([email protected]')

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

实际上如果按照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([email protected]')

如果不想修改源文件或者害怕更新后被覆盖,可以将上面加入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' );

伸手党也就算了,本来就是给大家用的,转贴不留出处的请自重。

共 46 条评论

  1. 回复

    Test测试测试。。。。

  2. 回复

    额,用了多说的,我的虽然不是叉叉,但是是灰色的。感觉已经失效了http://www.paotime.com/178.html

    • 回复

      可以用官方的,你看下我博客的头像。

  3. 回复

    什么情况?

  4. 回复

    学习一下啊

  5. 回复

    是已经失效了么?

    • 回复

      没有啊

      • 回复

        没有用了,网站都打不开的啊

        • 回复

          本站头像显示不正常吗?

  6. 回复

    非常不错,收藏

  7. 回复

    试额多次未果

  8. 回复

    很有效,而且很方便,写的也详细。

  9. 回复

    怎么我的后台显示 正常前台不显示呢

  10. 回复

    方法 不错 果然有效 感谢博主

  11. 回复

    看到大家的Gravatar头像被墙,我这里也提供一个用七牛搭建的Gravatar头像缓存。
    七牛的速度我想大家也体验过了吧!
    WordPress博客请将下面代码添加到当前主题的functions.php文件中即可解决。

    function gravatar_cache( $avatar )
    {
    //=== Gravatar头像缓存 ===//
    $avatar = preg_replace( "/http:\/\/(www|\d).gravatar.com/","http://7sbpvy.com1.z0.glb.clouddn.com",$avatar );
    $avatar = preg_replace( "/\?s\=/",".png?s=",$avatar );
    return $avatar;
    }
    add_filter( 'get_avatar', 'gravatar_cache' );

    不要感谢我,请叫我雷锋!!

  12. 回复

    学习了,多谢分享经验

  13. 回复

    已经使用,感谢分享

  14. 回复

    换上去了,转址成功,还是不能载入,貌似失效了吧

    • 回复

      没有失效,如果头像没有在多说缓存过,需要加载一下,过一会就好了。 这是楼下的头像

      http://gravatar.duoshuo.com/avatar/5727d42d5f4040d2edeb04ca768fb902?s=30&d=mm&r=G

  15. 回复

    找到这里了!谢谢!

  16. 回复

    早上发现头像被封了,所以尝试了下楼主的方式,问题是解决了,可是多说的头像感觉是被裁剪压缩过的,完全没有以前的清晰了,没办法,先用着吧

    • 回复

      看看本站的头像,奥秘就在其中。

  17. 回复

    试试,不知道还好使不~~

  18. 回复

    此方法已无效。。

    • 回复

      在后台设置了默认头像就不会出现你遇到的问题了.

  19. 回复

    帅呆了

  20. 回复

    嗯,木有头像的就是个叉了

  21. 回复

    注册不了Gravatar,用goagent的话老在提交密码的时候挂掉,怎么办~~求教

    • 回复

      适时转为直接连接就可以了。

  22. 回复

    我这边直接显示叉叉!

  23. 回复

    如果使用了多说的话,不应该担心这些东西了(毕竟,多说为了提供更好的服务器,这是他们应该考虑的事情),PS:这段代码很经典~

    • 回复

      这代码是写给没用多说的朋友们的

  24. 回复

    嗯,分享了,嘿嘿。

  25. 回复

    好方法…

  26. 回复

    头像只是一个好看!我没有在乎过!

    • 回复

      如果网页中有未加载完的图片,状态栏一直是等待状态。

    • 回复

      如果网页中有未加载完的图片,状态栏一直是等待状态。

  27. 回复

    从wp论坛过来求链接的,我的博客前台就是直接调用的gvatar头像,我去测试一下 嘿嘿~如果可以的话 给我回复哦

    • 回复

      已经添加了。

      • 回复

        嗯嗯 我没有看到?我先给你加上吧

        • 回复

          我有缓存插件,缓存清理过了,你刷新试试

  28. 回复

    这个挺不错的,借用了~

    • 回复

      发出来就是给大家用的嘛。

  29. 回复

    不错

发表评论

您的邮箱不会公开,当您的评论有新的回复时,会通过您填写的邮箱向您发送评论内容。 必填字段 *

为何看不到我发布的评论?

正在提交, 请稍候...