WordPress开发:Gravatar头像被墙的四种解决方案

微饭君公众号
weeiy

前几个月就已经出现过Gravatar头像无法调用的情况,Gravatar官网一直也是无法访问,我 Great wall Wall 也是V587,不得不让人折服!

症状:网站一直处于加载状态,访问速度变慢,左下角显示状态条:0.gravatar.com链接一直滚动等

以下为微饭从网上收集的四种应对Gravatar头像被墙的方案及其优缺点,供大家选用。

一、调用ssl 头像链接

https方式没被墙,速度也还不错,目前可以选择这个简单方式。

如果你的网站启用了ssl则不需要了,没有的话,需要在functions.php加入如下代码

//调用ssl 头像链接
function get_ssl_avatar($avatar) {
   $avatar = preg_replace('/.*\/avatar\/(.*)\?s=([\d]+)&.*/','<img src="https://secure.gravatar.com/avatar/$1?s=$2&d=mm" class="avatar avatar-$2" height="$2" width="$2">',$avatar);
   return $avatar;
}
add_filter('get_avatar', 'get_ssl_avatar');

优点:他们认为这个功能简单稳定~

缺点: 当头像特别大时速度可能略慢,微饭认为普通方式被BAN(游戏术语:禁用)了,SSL方式还会远吗~~

二、本地缓存

请将下面的代码加到functions.php

function my_avatar($avatar) {
  $tmp = strpos($avatar, 'http');
  $g = substr($avatar, $tmp, strpos($avatar, "'", $tmp) - $tmp);
  $tmp = strpos($g, 'avatar/') + 7;
  $f = substr($g, $tmp, strpos($g, "?", $tmp) - $tmp);
  $w = get_bloginfo('wpurl');
  $e = ABSPATH .'avatar/'. $f .'.jpg';
  $t = 1209600; //設定14天, 單位:秒
  if ( !is_file($e) || (time() - filemtime($e)) > $t ) { //當頭像不存在或文件超過14天才更新
    copy(htmlspecialchars_decode($g), $e);
  } else  $avatar = strtr($avatar, array($g => $w.'/avatar/'.$f.'.jpg'));
  if (filesize($e) < 500) copy($w.'/avatar/default.jpg', $e);
  return $avatar;
}
add_filter('get_avatar', 'my_avatar');

在WordPress安装根目(即跟wp-content等文件夹同一目录下)下新建一个名为 avatar 的文件夹 ,并给予写权限。放入一张同尺寸的头像图片命名为default.jpg。

优点:和主机速度挂钩,如果你的服务器特别快则头像加载也特别快。

缺点:首先你的主机要能出国,然后才是只能缓存一个尺寸的头像,打死就一个尺寸。

via:willin

三、多说缓存服务器

下面的代码加到functions.php

function duoshuo_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', 'duoshuo_avatar', 10, 3 );

 

优点:多说还是挺不错的,微饭一直在用多说。

缺点:有伙伴反应有时会少根筋。

四、七牛缓存方案

首先你要有个七牛账号,没有就先注册一个七牛账号:https://portal.qiniu.com/signup?code=3lea5cvgwgv9u

a1 QQ截图20141126202520 QQ截图20141126202559

将以下代码放入你的wordpress主题的functions.php中:

//头像使用qiniu缓存
function dw_get_avatar($avatar) {
$avatar = str_replace(array("www.gravatar.com","0.gravatar.com","1.gravatar.com","2.gravatar.com"),"grava1.qiniudn.com",$avatar);
return $avatar;
}
add_filter( 'get_avatar', 'dw_get_avatar', 10, 3 );

请将里面的:grava1.qiniudn.com 替换为你的七牛地址。

适用于使用七牛插件的小伙伴。

发表评论
加载中...
  • 淘小众 5个月前 (12-31)

    非常详细,感谢分享

  • 877 1年前 (2015-12-27)

    博主这个是多说吗? 如果不是,请问头像怎么搞定的呢?
    回复错了。。。

  • 沙发 2年前 (2015-09-16)

    瞧瞧

  • 大仁 2年前 (2015-09-02)

    HTTPS方式目前安全,建议全站切换到HTTPS去,多说,七牛之类的治标不治本

    查看对话
    • 微饭君 微饭 2年前 (2015-09-02) 官方

      目前用的V2的头像CDN,效果不错

  • 圣光迪莫 2年前 (2015-01-14)

    https即可。。。感谢楼主为所有生活在毫无人权的内地的只是玩玩博客的小朋友。。。

    查看对话
  • 春风博客 2年前 (2014-12-28)

    这个不成功呀

  • 松果 2年前 (2014-12-22)

    表来过

    查看对话
  • 0.0 2年前 (2014-12-19)

  • 头像缓存 2年前 (2014-12-19)

    测试留言看看

  • Han 3年前 (2014-12-01)

    我用的cn的头像服务器,速度也挺好

    查看对话
    • 微饭君 微Fan 3年前 (2014-12-01) 官方

      只要能用就可以~

  • 微饭君 微Fan 3年前 (2014-11-27) 官方

    我勒个去,有个错别字。。。

相关文章