启用新版的Gravatar头像缓存


好久前就想这样子干的了。Gravatar头像载入那是相当的慢啊。缓存到本地服务器那是需要的。

终于提起精神,花了点时间。

启用Willin Kan的新版Gravatar头像缓存。

新版的Gravatar头像缓存

首先是在根目录下建立一个文件夹avatar,权限755。再在里面放一个默认的头像(default.jpg),没头像的童鞋就会用默认的。

然后是定义一个函数。


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 = 2592000; //偶改为30天, 单位:秒
  if ( !is_file($e) || (time() - filemtime($e)) > $t ) { //當头像不存在或文件超过30天才更新
    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来实现。

add_filter('get_avatar', 'my_avatar');

把上面两段代码都丢进主题theme下的functions.php文件就行了。

get_avatar函数

用上面的方法简单方便啊。 不过还有一步是要注意的。得要确认在调用头像的地方都是用get_avatar函数来完成的。一般都是了,只有以前老的theme才不是。不是的话改过来就行。

如改为:

<?php echo get_avatar( $comment->comment_author_email, $size = '48', $default = get_bloginfo('wpurl') . '/avatar/default.jpg' ); ?>

这样就大功告成了。载入速度果然是快了。


115条回应:“启用新版的Gravatar头像缓存”

    • 我没研究。呵、只是直接拿过来用。不过因为我是用的老theme,需要先改些地方而已

  1. 我也觉得 Gravatar 现在相当缓慢啊。不过这个方法暂时不会用。看起来挺复杂,得不偿失吧。 [大兵]

  2. 话说能不能缓存到非博客空间?
    $w = get_bloginfo(‘wpurl’);
    –> $w = “http://xxx.org”;
    行的通?

  3. comment_author_email, $size = ’48’, $default = get_bloginfo(‘wpurl’) . ‘/avatar/default.jpg’ ); ?>
    这段代码应该加到那个文件里?

  4. zww之前一直在博客上写相关的文章,当时我没太在意。原来缓存头像是为了载入速度快啊。。那改天我也试试。。。
    记得童鞋以前写了WP的插件,对吧

  5. [疑问] 我也用了Willin Kan的新版Gravatar头像缓存,奇怪的是在首页的最新评论中的头像是缓存的,在缓存文件夹中也有相应的头像,但在相应评论的页面,评论者的头像却仍然是Gravatar的链接,这是为什么呢?

  6. 我以前用的就是这个 但是感觉那些没头像的都显示一样的空白太烦了 我想要显示随机的几何图形那个 怎么让这个代码支持呢 就是没头像的话不会输出一个默认的头绪 是随机的那个

  7. 我的模板在comment.php里面用到的是这个函数,怎么修改啊?好像不是get_avatar了。

  8. 如何修改avatar文件建立的文件地址?我不想把avatar文件建立在跟目录下!