将Gravatar头像缓存到七牛镜像服务器并解决参数问题

weixing 阅读 205 次

在之前一直使用的默认的get_avatar函数来获取评论者的头像,发现速度并不理想,因为gravatar的服务器在美国,所有有时候全部网页文件都打开了就是只有头像一直在转啊转,于是有了这篇wordpress教程:Gravatar头像缓存到本地,当然这里放到自己服务器也是挺不错的。
但是如果你或许因为各种原因不想使用了,目前我就是因为free-cookie的问题,可以百度一下,或者是新手觉得这个操作太麻烦了,各种权限,新建文件夹之类的。
那为什么不使用多说的镜像呢?原因很简单,多说不稳定,时常抽风。
所以今天的主题就是利用七牛云存储的镜像功能,来实现头像的缓存,并且不修改源文件的方法来解决参数问题,也就是头像的大小问题。

通过七牛云存储 缓存加速Gravatar 头像教程

首先、如果你还没有七牛云存储的账号,你可以通过我的链接去申请,我将获得免费的5GB流量,七牛的申请地址:https://portal.qiniu.com/signup?code=3laqnsyfvidzm
接下来,我们将对七牛的空间进行设置。因为过于简单,这里我复制devework的一些教程:
一、新建空间。登陆七牛云存储 开发者后台,新建个空间,比如Jeff 新建个名为“gravatar”的空间(要设置为公开),对应的二级域就是gravatar.qiniudn.com。
二、源站加速。点击该空间的“空间设置”—“源站加速”—“一键加速”,输入多说所在的 gravatar.duoshuo.com
本步骤是镜像多说缓存Gravatar 头像的地址,你也可以直接镜像Gravatar官方的 www.gravatar.com 。

修改主题文件

接下来就是在七牛云存储中利用图片处理的参数来设定头像的大小尺寸。我这里选择的是“-”中划线。
最后就是将一下代码丢到你的wordpress主题的functions.php中:

function wpmee_get_avatar($avatar, $id_or_email, $size='40', $default, $alt='') {
$email = $id_or_email->comment_author_email;
$email_hash = md5( strtolower( trim( $email ) ) );
$grav_url = "http://wpmee.qiniudn.com/avatar/" .
$email_hash ."-". $size;
$my_avatar = "<img src='$grav_url' alt='{$alt}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
return $my_avatar;
}
add_filter( 'get_avatar', 'wpmee_get_avatar', 10, 3 );

注意修改成你要的头像尺寸,我这里是40,也就是我的七牛自定义的图片样式名称,将其中的wpmee改成你自己的镜像的二级域名,因为本人是免费的所以流量不多。
最后的输出格式就是这样:http://wpmee.qiniudn.com/avatar/50ad321e53732e7b5a6593c3223fa9b0-40
当然,这段代码是我东拼西凑搞出来的,具体其他参数以及其他功能需要自己DIY,反正我测试是木有问题的。。。有问题欢迎提出来,大家一起共同学习!
教程参考:http://devework.com/qiniu-cache-accelerate-gravatar.html
更新,参考wordpress源文件放个比较全面的版本,这个跟修改源文件差不多的感觉了,但是可以直接丢到functions.php里:

//头像缓存之七牛镜像多说源
function my_get_avatar($avatar, $id_or_email, $size='40', $default, $alt='') {
if ( ! get_option('show_avatars') )
return false;
if ( false === $alt)
$safe_alt = '';
else
$safe_alt = esc_attr( $alt );
if ( !is_numeric($size) )
$size = '40';
$email = '';
if ( is_numeric($id_or_email) ) {
$id = (int) $id_or_email;
$user = get_userdata($id);
if ( $user )
$email = $user->user_email;
} elseif ( is_object($id_or_email) ) {
if ( ! empty( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (array) $allowed_comment_types ) )
return false;
if ( ! empty( $id_or_email->user_id ) ) {
$id = (int) $id_or_email->user_id;
$user = get_userdata($id);
if ( $user )
$email = $user->user_email;
}
if ( ! $email && ! empty( $id_or_email->comment_author_email ) )
$email = $id_or_email->comment_author_email;
} else {
$email = $id_or_email;
}
$email_hash = md5( strtolower( trim( $email ) ) );
$host = sprintf( "http://wpmee.qiniudn.com", ( hexdec( $email_hash[0] ) % 2 ) );
$out = "$host/avatar/".$email_hash.'-'.$size;
$out = str_replace( '&#038;', '&amp;', esc_url( $out ) );
$avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
return $avatar;
}
add_filter( 'get_avatar', 'my_get_avatar', 10, 3 );

 

扫描关注微信公众号WPMEE
  • 第一时间了解WordPress动态
  • 学习WordPress教程