默认情况下,Wordpress 会显示 Gravatar 的头像。Gravatar 头像相当于你的 QQ 头像,代表的就是你在网络的个人形象,所以各种社交程序都不能免除头像的使用。
在国内,显示比较慢或者直接超时(原因你懂的),在这种情况下,就得考虑是否要将头像修改成别的了。
这里有2种办法:一种是直接缓存图片到你自己的服务器,然后输出的时候替换成你服务器的地址。还有种就是利用多说的头像缓存,调用多说的地址来得到 Gravatar 头像。
第一种缓存 Gravatar 头像需要你的服务器能顺畅的连接到 Gravatar 的服务器。然后接下来需要在主题中的 functions.php
中添加以下内容:
<?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('home');
$e = ABSPATH .'avatar/'. $f .'.jpg';
$t = 1209600; //設定14天, 單位:秒
if ( !is_file($e) || (time() - filemtime($e)) > $t ) { //當頭像不存在或文件超過14天才更新
$get_file = request_file($g);
$fp = @fopen($e, "w");
@fwrite($fp,$get_file);
fclose($fp);
} 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 request_file($url){
$ch = curl_init() ;
curl_setopt($ch, CURLOPT_URL, $url) ;
ob_start();
curl_exec($ch);
$result = ob_get_contents() ;
ob_end_clean();
curl_close($ch) ;
return $result;
}
另一种方法就比较简单了,替换 Gravatar 的地址成多说的就好了。
function mytheme_get_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', 'mytheme_get_avatar', 10, 3 );
OωO 现在gravatar头像的访问速度比以前快好多了。
不管了,我现在直接使用反代,变成什么样都没问题
现在是替换成secure.gravatar.com或者cn.gravatar.com比较好,现在也没被墙。其他的镜像或者缓存都不支持srcset特性(就是Retina和高分辨率)。
这两个目前已经不时的中断了,还是反代把
自用国外v或七牛,又拍搭个镜像秒杀一切
我打算自己去弄个Gravatar缓存镜像
这个简单,nginx反代加设定缓存即可
多说党表示Gravatar是浮云
多说载入速度是问题
多说用了插件应该就不用了吧
用了多说插件肯定不用了
有些时候Gravatar加载比较慢
慢起来根本不显示
我也替换成多说了
第一种方法在wordpress中可行,不知道emlog能不能用呀;第二种嘛,用了多说这个我只能不考虑了唉~
额,你用了多说啊
是因为我不用多说,所以不考虑的啦~
哦哦,我理解错了。你对多说有什么成见?
前來支持一下~~學習啦!! :-|