2016-05-31 21:01
轻松解决WordPress博客Gravatar头像被墙
自2014年10月左右开始,Gravatar 头像服务在中国大陆就陆续被彻底屏蔽了,(网站一直处于加载状态,访问速度变慢,左下角显示状态条:0.gravatar.com链接一直滚动等国内没办法正常访问)就连之前使用的缓存头像到本地的方法,在国内主机中也失效了。怎么办?下面博主就和大家分享下修复gravatar头像被墙的过程!如果您还没有Gravatar头像请参考http://hechaocheng.cn/get-Gravatar/
如没说明都是将以下代码放入你的当前wordpress主题的functions.php中,任选其一:
支持HTTPS请问。
//=== Gravatar头像缓存 ===//
function gravatar_cache( $avatar ){
return preg_replace(‘/\?s\=/’, ‘.png?s=’, preg_replace(‘/http:\/\/(www|\d).gravatar.com/’, ‘gravatar.hechaocheng.cn’, $avatar));
}
add_filter( ‘get_avatar’, ‘gravatar_cache’ );
如果不想用这个方案,或许使用ssl 头像链接、本地缓存、多说缓存服务器也可以。
本地缓存
function my_avatar($avatar) {
$tmp = strpos($avatar, ‘http’);<br /><br /><br /><br />
$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’);
多说缓存服务器
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 );
调用ssl 头像链接
//调用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’);