终于把 WordPress 的 Gravatar 头像缓存搞定了(代码版)

一直在朝着 WP 终极优化前进,最近看到 Twitter 上有人抱怨说 Gravatar 头像服务器又挂了。早在很久以前就看到万戈同学在玩命的折腾优化他的博客。终于把 Yahoo 的 Yslow 等级给优化成 A 了。置于优化什么我就不多说了。其中缓存是必不可少的。而且是个大块头。不过在他那翻了好久,他写的关于缓存的文章太多了。我都不知道照哪个来修改了。最后还是在 ZwwOOOOOO 那里找到的这篇Willin 大师的超短小精悍的 Gravatar 头像缓存 for WP 代码版的文章。转载过来了。由于WP的模板开放性太强了,很多人都是用不同方法调用的 Gravatar 头像函数。所以如果模板不对,那么根本找不到代码,还好 Zwwooooo 同学收集了不同模板的修改方法。哈哈,好省事,直接转了。当然,大大的外链要给他了。

前提:

确定自己的模板主题文件 comments.php 用的是 WordPress 2.7 以后才有的 wp_list_comments()

开始:

1. 在网站的根目录建立文件夹:avatar,权限为:755, 这是准备 gravatar 缓存的路径

2. 把一个50×50的jpg图片改名为:default.jpg,把它存到第1步建立的 gravatar 缓存文件夹 avatar 里面

3. 找到主题文件 comments.php 或是在 functions.php 里的 function mytheme_comment($comment, $args, $depth) 会有一段像下面这样一段代码:

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

替换成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$p = 'avatar/';
$f = md5(strtolower($comment->comment_author_email));
$a = $p . $f .'.jpg';
$e = ABSPATH . $a;
if (!is_file($e)){ //当头像不存在就更新
$d = get_bloginfo('wpurl'). '/avatar/default.jpg';
$s = '32'; //头像大小 自行根据自己模板设置
$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 bloginfo('wpurl'); ?>/<?php echo $a ?>' alt='' class='avatar' />

4. 没有了,简单不?

补充:
如果你的主题比较老,在 comments.php 有下面这字段(function.php 没有自定义评论样式)

1
<?php echo get_avatar( $comment, 48 ); ?>

替换为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$p = 'avatar/';
$f = md5(strtolower($comment->comment_author_email));
$a = $p . $f .'.jpg';
$e = ABSPATH . $a;
if (!is_file($e)){ //當頭像不存在就更新
$d = get_bloginfo('wpurl'). '/avatar/default.jpg';
$s = '48';//头像大小 自行根据自己模板设置
$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 bloginfo('wpurl'); ?>/<?php echo $a ?>' alt='' class='avatar' />

如果你用的是 MG12 的 Elegant Box 主题,那么,打开 function.php,找到下面这句:

1
echo '<div class="userpic">'; echo get_avatar($comment, 24); echo '</div>';

替换为:

1
2
3
4
5
6
7
8
9
10
11
12
13
$p = 'avatar/';
$f = md5(strtolower($comment->comment_author_email));
$a = $p . $f .'.jpg';
$e = ABSPATH . $a;
if (!is_file($e)){ //當頭像不存在就更新
$d = get_bloginfo('wpurl'). '/avatar/default.jpg';
$s = '24'; //头像大小 自行根据自己模板设置
$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); }
};
echo '<div class="userpic">'; echo '<img src="'; echo bloginfo('wpurl'); echo '/'; echo $a; echo '" class="avatar" /></div>';

如果你用的是 MG12 的大名鼎鼎的 iNove 主题(测试版本是1.4.6),那么打开 function.php,找到:

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

替换为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php if (function_exists('get_avatar') && get_option('show_avatars')) { //echo get_avatar($comment, 32);
$p = 'avatar/';
$f = md5(strtolower($comment->comment_author_email));
$a = $p . $f .'.jpg';
$e = ABSPATH . $a;
if (!is_file($e)){ //當頭像不存在就更新
$d = get_bloginfo('wpurl'). '/avatar/default.jpg';
$s = '32'; //头像大小 自行根据自己模板设置
$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); }
};
echo '<img src="'; echo bloginfo('wpurl'); echo '/'; echo $a; echo '" class="avatar" />';
} ?>

注意:有些主机的特殊性可能无法使用这个功能,可以先试试插件能否成功运行再测试这个简单代码

相关评论

  1. jalena说道:

    这方法貌似早就淘汰了吧,现在都是add_filter来处理数组了哦

  2. […] ——小小更新一下,Forece’s Blog上有令人咋舌的代码法…… […]

  3. 3qsami说道:

    原来直接用代码实现本地化头像是这么简单的事!领教了。后面补充了这么多,实质上也就是找到关键字“(get_)avatar”了。

  4. also说道:

    晕,代码什么的最讨厌了。。。。

  5. 山头人说道:

    今天终于忍不住动手了.因为我发现在打开文章页特慢,所以就到你这来看这个

  6. 小辉网说道:

    我的这个文件里面我仔细搜索了,没发现这句代码。看来只能放弃了。

  7. 早期症状说道:

    呵呵 折腾万岁~~~

  8. 这个当时我怎么弄也不行 最后 我就用的代码了……

  9. 山头人说道:

    我没在用INOVE主题了,gravatar头像缓存有时候想搞,又懒得动手。唉,,真是矛盾。

  10. 维翔博客说道:

    呃。。牛人写的教程

  11. 秋天一棵树说道:

    晕,我的php代码被屏蔽了,去掉首尾看看:
    if( have_comments() ):
    wp_list_comments(‘callback=philnaComments&avatar_size=40’);
    else:
    ?>

  12. 秋天一棵树说道:

    我的主题目录中comments.php关于Gravatar是这样的:

    Forece看有办法没有。

  13. 万戈说道:

    …这么巧,我刚去掉头像缓存。。。

  14. insect说道:

    我用的inove主题

  15. 七七说道:

    嗯,省事的方法当然好,支持了!

  16. zwwooooo说道:

    这个是老方法吧,新的方便点

  17. 囧啊囧说道:

    沙发后面远处,我不折腾代码,换模板的时候麻烦。

  18. BoKeam说道:

    占沙发..用willin kan的直接放functions就行了

相关评论:

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据