• 欢迎访问亿网部落,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏亿网部落吧!
  • 欢迎光临亿网部落 www.26yi.com 互联网分享精神,专注收藏分享!
  • 欢迎加入亿网部落 官方QQ群 第一时间通知最新更新的资源! ①群:xxx ②群:xxx
  • 亿网部落 广告位 火热招商中 原价20元/月 现价只需10/月 需要联系QQ:476507773

Gravatar头像被墙最新完美解决方案

wp教程 亿网部落 4年前 (2015-03-10) 1349次浏览 已收录

完美解决方案

编辑当前主题的 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.comhttps://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' );

方案二:

4、官方 Gravatar 头像调用 ssl 头像链接 。

https 还是没被墙的,而且速度还不错,直接调用这个最简单了。

如果你的网站启用了 ssl 则不需要了,否则 functions.php 加入如下代码:

//官方 Gravatar 头像调用 ssl 头像链接
function get_ssl_avatar($avatar) {
   $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);
   return $avatar;
}
add_filter('get_avatar', 'get_ssl_avatar');
打赏

乐趣公园 , 版权所有丨本网站资源均来自网络,如果侵犯了你的权益请联系我,我会尽快处理你的问题丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Gravatar 头像被墙最新完美解决方案
喜欢 (0)
[476507773@qq.com]
分享 (0)
关于作者:
喜欢互联网,喜欢分享,喜欢贴吧,喜欢折腾火狐,喜欢玩新玩意。在下面这些网站,你可能也会发现我的哈。