全面启用gravatar头像缓存

2009/09/14 Add 57 comments |

    把Gravatar头像缓存到本地服务器,避免访客每次都从gravatar.com下载头像,有效提升了博客访问速度。因为我用的是国内空间,所以启用头像缓存有一个更重要的意义:让用教育网的同学也可以看到头像。Let's whisper有两个地方用到了gravatar头像:评论列表和最新评论(启用了wp-recentcomments插件),所以这两处都要进行缓存。

    我用的启用gravatar头像缓存的方法来自willin,取名为“小g”,也许这是世界上最小巧的gravatar头像缓存方案。下面我就介绍一下这个方法,特别是iNove用户,往下看咯。

1、对评论列表里的gravatar头像启用缓存
先在你的网站 wp-content 的同级目录 建立文件夹: /avatar 权限:755, 这是准备 gravatar 缓存的路径。
找到原来的 comments.php 或是在 functions.php 里的 function mytheme_comment($comment, $args, $depth) 会有一段像这样:

<?php echo get_avatar($comment,$size='50',$default='<path_to_url>' ); ?>

如果你用的iNove主题,在functions.php里会有下面的一段:

<?php if (function_exists('get_avatar') && get_option('show_avatars')) { echo get_avatar($comment, 32); } ?>

把这个换成:

<?php
$p = 'avatar/';
$f = md5(strtolower($comment->comment_author_email));
$a = $p . $f .'.jpg';
$e = ABSPATH . $a;
if (!is_file($e)){    //当头像不存在就更新
$d = get_bloginfo('url'). '/avatar/default.jpg';
$s = '50';
$r = get_option('avatar_rating');
$g = 'http://www.gravatar.com/avatar/'.$f.'.jpg?s='.$s.'&d='.$d.'&r='.$r;
copy($g, $e);
if ( filesize($e) == 0 ){ copy($d, $e); }
};
?>
<img src='<?php echo $a ?>' alt='' />

预设头像 default.jpg, 放在刚刚建立的 avatar 文件夹内,当访客不是gravatar用户时就会调用这个头像。 上面的变量名顺便解释一下: $p 是 path(路径), $f 是 filename(档案名), $a 是 avatar(缓存档案), $e 是服务器路径, $d 是 default(预设头像), $s 是 size(尺寸), $r 是 rate(分级), $g 是 gravatar(原始档案)。

如果想要更新头像,去ftp里把 /avatar 路径下的头像文件删除就可以了。

2、对wp-recentcomments插件的头像启用缓存

/wp-recentcomments 路径下找到 core.php,其中有这么一段:

function rc_get_avatar($show, $position, $size, $default, $email) {

    $avatar = '';
    if ($show == 'true' && function_exists('get_avatar') && get_option('show_avatars')) {

        // 当默认头像来自 Internet 时
        if (substr(strtolower($default), 0, 7) == 'http://') {
            $file = attribute_escape($default);
            $avatar = '<div class="rc_avatar rc_' . $position . '">' . get_avatar($email, $size, $file) . '</div>';

        // 当默认头像来自 "/wp-recentcomments/avatars/" 目录时
        } else if ($default != '') {
            $file = 'wp-content/plugins/wp-recentcomments/avatars/' . $default;
            if (file_exists($file)) {
                $file = get_bloginfo('siteurl') . '/' . $file;
                $avatar = '<div class="rc_avatar rc_' . $position . '">' . get_avatar($email, $size, $file) . '</div>';
            }

        // 当不包含默认头像时
        } else {
            $avatar = '<div class="rc_avatar rc_' . $position . '">' . get_avatar($email, $size) . '</div>';
        }
    }

    return $avatar;
}

改成:

function rc_get_avatar($show, $position, $size, $default, $email) {

    $avatar = '';
    if ($show == 'true' && function_exists('get_avatar') && get_option('show_avatars')) {

$p = 'avatar/';
$f = md5(strtolower($email));
$a = $p . $f .'.jpg';
$e = ABSPATH . $a;
if (!is_file($e)){
if ($default){$d = $default;} else {$d = get_bloginfo('url'). '/avatar/default.jpg';}
$r = get_option('avatar_rating');
$g = 'http://www.gravatar.com/avatar/'.$f.'.jpg?s='.$size.'&d='.$d.'&r='.$r;
copy($g, $e);
if ( filesize($e) == 0 ){ copy($d, $e); }
};
    $avatar = '<div class="rc_avatar rc_' . $position . '"><img src="'.$a.'" style="width:'.$size.'px;height:'.$size.'px;" alt="" /></div>';

    }
    return $avatar;
}

完成。

重要提示:  如果采用这个方法后,文章页面无法显示头像,而且头像地址变成形如www.whisperer.name/cache-gravatar/avatar/...的样子,请把上面代码中的$p = 'avatar/'改成$p = '/avatar/'

Posted by whisperer | in Skills, wordpress | 2,471 views | Tags: , , | Twit it !
  1. 09. 14th, 2009 at 03:38 | #1

    对于我来说没有太多必要啦,不过看过,学习一下也是好的:)

  2. 09. 14th, 2009 at 06:09 | #2

    呵呵,我也正用着头像缓存呢,前段时间台风,gravatar也受到了影响,加载很慢的,有了缓存就好多了.

  3. 09. 14th, 2009 at 06:32 | #3

    @Rui
    嗯 你的读者都是国外的 当然用不着了~~ :roll:

  4. 09. 14th, 2009 at 06:34 | #4

    @万戈
    嗯 在你那儿也看到了 本想收藏以后慢慢弄呢 willin大师就提供了一个这么简便的方法,所以很快就用上了 :grin:

  5. 09. 14th, 2009 at 06:36 | #5

    @whisperer
    哇,你睡的比我晚,起的还和我一样早

  6. 09. 14th, 2009 at 06:54 | #6

    @whisperer
    Gravatar是全球的啊 :roll: 为什么用不着咧?

  7. 09. 14th, 2009 at 06:55 | #7

    呀~明白你的意思了,是网速的原因^^国外网络环境确实比国内好很多很多。

  8. 09. 14th, 2009 at 07:14 | #8

    Rui :

    呀~明白你的意思了,是网速的原因^^国外网络环境确实比国内好很多很多。

    就是这个意思,哈哈

  9. 09. 15th, 2009 at 08:33 | #9

    呵呵,写得很好,很深刻,向你学习~
    可惜我用的不是WordPress,不然也开启gravatar~

  10. 09. 15th, 2009 at 08:53 | #10

    @wuleilei
    谢谢支持 哈哈
    不用WordPress也没关系,可以去申请一个gravatar头像啊,起码在朋友这儿可以用 :grin:
    现在我正在做一个友情链接页面 就是用头像显示的。

    再赞叹一下自己写博客程序的。。。。

  11. 09. 15th, 2009 at 09:17 | #11

    我早就缓存了 欧也

  12. 09. 15th, 2009 at 09:34 | #12

    @Showfom
    都是你挖的坟,结果万戈紧跟着,再后来willin,最后我也忍不住了。。 :mrgreen:

  13. 09. 15th, 2009 at 09:36 | #13

    @whisperer
    我挖了坟,然后你们都跳进来了……

  14. 09. 15th, 2009 at 09:45 | #14

    @Showfom
    跳进去之后果然获得新生了,不去gravatar.com的感觉真好 :o

  15. 09. 15th, 2009 at 09:48 | #15

    @whisperer
    我忘了说 经常得清空缓存 否则别人的头像更新了 在博客上还是显示旧的头像 囧

  16. 09. 15th, 2009 at 10:05 | #16

    @Showfom

    无聊的时候就清空下~~

  17. 09. 15th, 2009 at 21:58 | #17

    又来这里听歌了

  18. 09. 15th, 2009 at 23:34 | #18

    @北极寒流实用软件
    嗯 遇到有链接失效的告诉我一声哈 现在知道那首T-shirt暂时听不了

  19. 09. 16th, 2009 at 00:07 | #19

    文章写得条例清理,学一下。

  20. 09. 16th, 2009 at 13:09 | #20

    这招还是有点用的。。先收藏

  21. 09. 16th, 2009 at 15:36 | #21

    路过!学习了...

  22. 09. 16th, 2009 at 16:47 | #22

    我现在怕折腾,我的是DH空间速度马马虎虎,我是每次浏览完就清楚记录的人,基本没什么必要如此这般,其他朋友嘛,呵呵,很多人不在乎头像吧,我想!

  23. 09. 16th, 2009 at 20:45 | #23

    先做个记录,谢了

  24. 09. 16th, 2009 at 22:09 | #24

    @xiao6
    谢谢路过~~ :lol:

  25. 09. 16th, 2009 at 22:11 | #25

    @joe
    这个是在服务器缓存哦,你看下头像地址就知道了。因为老外那个gravatar.com太慢了,这么做访问会快些~

  26. 09. 16th, 2009 at 22:12 | #26

    @derek
    嗯 不用客气,什么时候想用的话来拿就是 :grin:

  27. 09. 16th, 2009 at 22:23 | #27

    哇。似乎很不错 :mrgreen:

  28. 09. 16th, 2009 at 22:30 | #28

    @Blinux
    是啊 还有一个小优点就是对于没有用gravatar的同学,可以给他们手动设置头像 哈哈

  29. 09. 16th, 2009 at 22:42 | #29

    先来试试我新邮箱的头象正不正常~~~嘿 ;-)

  30. 09. 16th, 2009 at 23:18 | #30

    @Lc.
    汗。。我看成了你的邮箱换了新头像,赶紧去删缓存,结果刷新后还是一样 :mrgreen:

  31. 09. 17th, 2009 at 06:41 | #31

    @whisperer
    哈哈。就是一样的

  32. 09. 17th, 2009 at 10:25 | #32

    说实话缓存是个让我又爱又恨的东西。。。记得博客当时缓存那会儿,刚做的效果不会立刻显示,得Ctrl+F5刷才行,不然缓存仍保留原先效果,麻烦死了。

  33. 09. 17th, 2009 at 14:03 | #33

    @Rui
    对,缓存就是这样。我现在用super cache,所以修改主题的时候就先关了它。

    不过这个gravatar缓存不太一样,这个实际上就是我把头像下载后放到自己服务器上,访客直接从我服务器上获得头像了。我需要不定时删除这些保存的头像,不然有人改头像后即使怎么刷新都不会有改变。

  34. 09. 17th, 2009 at 16:22 | #34

    哈哈,当留言者数量增多时,头像确实是个技术方向。在这里都能看到万戈兄 :grin: 。。。。。。。。
    我新站,whisperer加连。 :cool:

  35. 09. 17th, 2009 at 23:17 | #35

    应该好好的研究一下

  36. 09. 20th, 2009 at 14:03 | #36

    恩 按你的方法试试 呵呵

  37. 09. 20th, 2009 at 14:25 | #37

    出现了怪异的情况 有的图片显示正常 有的是X, 图片ftp看了是存在的,但打开地址确是404.。。。

  38. 09. 20th, 2009 at 14:34 | #38

    @BestDong
    解决! 开始没有default.jpg就打开网页,之后才传默认图像导致的. :twisted:

  39. 09. 20th, 2009 at 14:40 | #39

    @BestDong
    呵呵 好了就成 :o

  40. 09. 25th, 2009 at 15:26 | #40

    太帅了! 你的代码框是如何实现的? 各种颜色。。。。。读起来很方便。

  41. 10. 1st, 2009 at 06:36 | #41

    嗯。这是个很好的方法。

  42. 11. 1st, 2009 at 22:36 | #42

    有更新, 特來通知. http://willin.heliohost.org/?p=1277

  43. 11. 1st, 2009 at 23:38 | #43

    这个对流量的影响大吗

  44. 11. 1st, 2009 at 23:57 | #44

    @A.shun
    不是流量问题 是速度问题
    访问自己的服务器比访问gravatar.com要快多了

  45. 12. 21st, 2009 at 17:06 | #45

    你救了我~~

  46. 12. 21st, 2009 at 17:07 | #46

    @老饕
    为啥?

  47. 12. 21st, 2009 at 17:30 | #47

    @whisperer
    囧~~inove还是不行~~怎么搞到~~唉

  48. 12. 21st, 2009 at 17:32 | #48

    @老饕
    那我就不知道了 难道是新版本的问题

  49. 12. 21st, 2009 at 17:35 | #49

    @whisperer
    没有~~1.4.5~没升级~有人在inove下修改成功吗?

  50. kc
    01. 21st, 2010 at 10:30 | #50

    试了下1.4.6下行不通 主要是recentcomment的缓存搞不定

Comment pages
  1. 09. 25th, 2009 at 08:05 | #1
  2. 02. 25th, 2010 at 00:46 | #2
  3. 04. 13th, 2010 at 13:55 | #3