因为特殊情况可能Gravatar会无法访问,这个时候我们就只能换掉Gravatar服务器。
Gravatar备选方案还是很多的,有官方提供备用线路节点及地区节点,还有一些第三方提供的Gravatar加速CDN,以及我们可以自己利用七牛做CDN加速。

七牛 Gravatar镜像:
注册七牛,新建项目,设置绑定网站为cn.gravatar.com,然后拿七牛提供的二级域名直接用

wordpress模板funtions.php设置

镜像方案

// 替换Gravatar为v2ex头像源
function yjl_get_avatar( $avatar ) {
    $avatar = preg_replace("/http:\/\/(www|\d).gravatar.com\/avatar\//","http://cdn.v2ex.com/gravatar/",$avatar);
    return $avatar;
}
add_filter('get_avatar', 'yjl_get_avatar');

缓存方案

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-includes文件夹,找到pluggable.php(WP4.2之前版本)打开,将大约2150至2157行:

if ( is_ssl() ) {
    $host = 'https://secure.gravatar.com';
} else {
    if ( !emptyempty($email) )
        $host = sprintf( "http://%d.gravatar.com", ( hexdec( $email_hash[0] ) % 2 ) );
    else
        $host = 'http://0.gravatar.com';
}

替换为:

$host = 'https://secure.gravatar.com';

或者(支持头像缓存插件)

$host = 'http://cn.gravatar.com';

WP4.2之后版本,打开wordpress程序目录的wp-includes文件夹,打开link-template.php,将大约第3604行的:

$url = sprintf( 'http://%d.gravatar.com/avatar/%s', $gravatar_server, $email_hash );

修改为:

$url = sprintf( 'http://cn.gravatar.com/avatar/%s', $email_hash );

之所以说“笨”是因为下次更新程序,还需要再次修改,不过这个方法最实用。

以上方法主要针对使用用国内主机用户,使用国外主机这时优势突显,并不需要修改任何东西,安装头像缓存插件,将头像缓存到本地,并不影响正常使用。

https直接替换国内

$url = 'https://secure.gravatar.com/avatar/' . $email_hash;

修改为:

$url = 'https://gravatar.loli.net/avatar/' . $email_hash;

typecho模板funtions.php设置

修改typecho中Common.php程序文件让gravatar可以正常显示
打开文件var\Typecho\Common.php,找到以下代码(大概在939行)

$url = $isSecure ? 'https://secure.gravatar.com' : 'http://1.gravatar.com';

修改为

$url = $isSecure ? 'https://cn.gravatar.com' : 'http://cdn.v2ex.com';

应该还可以多加几个域名,哈哈!这里就没有去测试了,当然这2个域名可以自行选择以上任意镜像的域名

来源:https://yijile.com/log/503.html