现在的位置: 首页 > Wordpress > WP技巧 > 正文
关于WordPress的Gravatar头像缓存到本地服务器
2012年07月06日 WP技巧 ⁄ 共 2326字 评论数 35 ⁄ 被围观 8,199+

其实一直以来都在考虑 Gravatar 头像缓存问题,Gravatar 头像图片是放在国外的服务器上,加上这是一项免费服务,很难有保证,Gravatar的服务器经常挂掉,国内访问读取缓慢,严重影响博客加载速度,因此把Gravatar头像缓存到本地服务器是很有必要的,使其不受 Gravatar 服务器连接速度的影响。之前想通过代码形式实现,可惜主机不给力,不支持某些函数。现如今换了主机,却又懒得折腾代码了,虽然只是简单的 copy——paste,或许是真的老了。

所以想来想去,还是通过插件方式来实现吧。关于缓存头像的插件其实有很多,比如GravatarLocalCache、FV Gravatar Cache、WP Gravatar Mini Cache、Gravatar Cache、Hacklog Gravatar Cache等等,综合考虑,还是选择了GravatarLocalCache,原因是简单小巧,才24KB,而且不用做任何设置,尤其适合现在的我。

插件名称:GravatarLocalCache

插件地址:http://wordpress.org/extend/plugins/gravatarlocalcache/

插件使用:安装——激活即可正常使用。默认缓存时间为72小时,如果要改变,后台修改即可。

gravatarlocalcache

很多人会有疑问,我怎么才知道是否已经缓存了 Gravatar 头像呢?方法很简单,查看网页源代码,缓存前,Gravatar 的头像链接一般是:http://0.gravatar.com/avatar/80c6778d63af710963c2c43c81bbe833?s=36&d=&r=G;缓存后,Gravatar 的头像链接一般是:http://blog.ifenwen.com/wp-content/glc_cache/80c6778d63af710963c2c43c81bbe833-48.jpg。当然这里是拿我自己的头像作为参考的,成功与否看这链接就知道了。

好吧,对于爱折腾的童鞋,同样可以采用代码实现Gravatar头像缓存到本地服务器,方法来自willin,修改于zww

一、前期工作

  • 1、在网站(博客)根目录建一个名为 avatar 的文件夹,保证其可写。(一般虚拟主机就755权限即可。)
  • 2、自己制作或者Copy一个名称为 default.jpg 的图片作为默认头像,图片宽高根据自己主题设定,如 50*50,然后上传到第1步里面说的 avatar 文件夹里面。
  • 3、确定自己的主机支持 php 的 copy() 函数。(注:一般虚拟主机都支持,免费类主机需检测是否支持。)
  • 4、保证使用的 WordPress 版本在 v3.0 以上。

二、代码部分

把下面的函数代码放到主题的 functions.php 文件里面(注意要放到 < ?php ?> 里)。

* Mini Gavatar Cache by Willin Kan. Modify by zwwooooo */
 function my_avatar( $email, $size = '50', $default = '', $alt = '' ) {
     // $alt = (false === $alt) ? '' : esc_attr( $alt );
     $alt = ('' == $alt) ? '' :  $alt ;
     $f = md5( strtolower( $email ) );
     $w = home_url(); //$w = get_bloginfo('url');
     $a = $w. '/avatar/'. $f . '.jpg';
     $e = preg_replace('/wordpress\//', '', ABSPATH) . 'avatar/' . $f . '.jpg';
     $t = 604800; //设定7天, 单位:秒
     if ( empty($default) ) $default = $w. '/avatar/default.jpg';
     if ( !is_file($e) || (time() - filemtime($e)) > $t ){ //当头像不存在或者文件超过7天才更新
         $r = get_option('avatar_rating');
         $g = sprintf( "http://www.gravatar.com", ( hexdec( $f{0} ) % 2 ) ). '/avatar/'. $f. '?s='. $size. '&d='. $default. '&r='. $r;
         copy($g, $e);
     }
     if (filesize($e) < 500) copy($default, $e);
     $avatar = "<img title='{$alt}' alt='{$alt}' src='{$a}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
     return apply_filters('my_avatar', $avatar, $email, $size, $default, $alt);
 }

三、修改调用

找到主题评论自定义函数,一般在 functions.php 文件里面,如果你的主题没有自定义评论函数,那么只能自己添加了。一般就是把主题里面的 get_avatar() 函数替换为 my_avatar()

例如:< ?php echo get_avatar($comment, $size='40', $default='' ); ?>

改为:< ?php echo my_avatar($comment, $size='40', $default='', $alt=$comment->comment_author ); ?>

多了一个“$alt”属性,是为了让输出的Gravatar图片链接含“alt”属性,也就是为了通过w3c的验证。

终于折腾了头像缓存问题,希望主机能给力些,加快些速度。



目前有 35 条留言 其中:访客:35 条, 博主:0 条

  1. 番茄 : 2012年07月14日01:06:46  11楼

    还是插件更简单省事。


    • 管理员
      admin : 2012年07月26日07:44:55  地下1层

      是啊 偷懒点

  2. 汶海洳 : 2012年07月25日23:18:57  12楼

    国内好用的主题都有了集成这功能


    • 管理员
      admin : 2012年07月26日07:45:15  地下1层

      恩 那样才好

  3. 乐绣宝 : 2012年08月01日09:03:34  13楼

    这个方法很好啊


    • 管理员
      admin : 2012年08月01日11:58:29  地下1层

      是啊 估计速度可以稍微快些

  4. 黑窝's Blog : 2012年08月24日02:51:13  14楼

    插件越多速度越慢,我很想关闭Gravatar头像


    • 管理员
      admin : 2012年08月24日08:02:14  地下1层

      额 不是有非插件的方法么

      • 黑窝's Blog : 2012年08月24日10:50:21  地下2层

        【 ?php echo get_avatar($comment, $size=’40’, $default=” ); ?】 米有,你这个功能改好了?


        • 管理员
          admin : 2012年08月24日11:09:21  地下3层

          额 我用的插件。。。

  5. 无名 : 2012年10月13日16:31:16  15楼

    现在很多主题都集成了图像缓存功能


    • 管理员
      admin : 2012年10月13日19:04:22  地下1层

      额 也是 主题越来越丰富

  6. 飘零 : 2012年10月19日17:04:12  16楼

    不是很在意这个


如果觉得文章或者网站对您有帮助请点击 向TA付款 捐赠作者或者点击下面的分享按钮支持作者

更多

给我留言

留言无头像?

无觅相关文章插件,快速提升流量

×