willin 的简单 gravatar 头像缓存

2010.7.5 Update: willin升级了代码,更加方便,直接移步到这里》http://kan.willin.org/?p=1277 或者这里》https://zww.me/archives/25296

--------------------------

其实这个功能有很多种方法实现,有插件,有 showfom 的 《更换空间 + 再次提速之 Gravatar 头像缓存》,但 showfom 的方法对于使用 wp_list_comments() 不太方便而且比较麻烦。所以我选择了 Willin 的简单方法。具体的原理和方法请到 Willin 的原文章:传送门

这里我只说步骤,因为我 CP 党(CopyPaste党),所以方法自然就是 CP 级的了,也就简单易懂啦。

前提:

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

开始:

1. 在 wp-content 的同级目录建立文件夹:avatar,权限为:755, 这是准备 gravatar 缓存的路径

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

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

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

替换成:

<?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' />

3. 没有了,简单不?
补充:

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

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

替换为:

<?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' />

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

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

替换为:

$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>';

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

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

替换为:

<?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" />'; } ?>

如果还有其他主题,我会陆续放上

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

zww
or
oooo

“willin 的简单 gravatar 头像缓存”有137条评论

  1. xiao3 says:

    国内主机似乎就不需要这样啦! :?: :?: :razz:

    1. zwwooooo says:

      相反,国内主机才需要,因为国内主机快,gravatar 在国外会拖慢网站速度

  2. alswl says:

    先mark,等这几天忙完了在折腾wp

    1. zwwooooo says:

      慢慢折腾

  3. 阿士 says:

    不建default.jpg行不行?

    1. zwwooooo says:

      当然行,但如果出现有人没有头像的情况下会出错

      1. 阿士 says:

        出错?不是会自动生成的吗?

        1. zwwooooo says:

          不会,加张default.jpg有这么难么?况且wp后退就有默认的图片,这个不需要这么纠结 :lol:

          1. 阿士 says:

            .... :evil:

  4. :!: 果然跟我同名……

    1. zwwooooo says:

      哇咔咔,我都说了嘛

  5. licream says:

    能放个我的主题方法不,谢谢啊。

    1. zwwooooo says:

      @licream 你的主题按照上面的方法自己试试吧,我不可能把所有的主题都依个测试吧,如果这样我会累死的 :lol: 不过有时间我会试试

    2. licream says:

      @zwwooooo
      - -嗯嗯。

  6. 星网 says:

    弄这个效果最大的好处是什么?就是网站打开速度快了?

    1. 锋子 says:

      @星网 肯定快了~哈哈 :grin:

    2. zwwooooo says:

      @星网 不然我们瞎折腾干嘛呢?

  7. 锋子 says:

    过来光顾下~~

  8. Jutoy says:

    嗯,这个不错的方法,那要是自动刷新缓存的么?还是手动刷新?

    1. zwwooooo says:

      @Jutoy 已经缓存了的头像如果更换了新头像就要手动刷新,但你用了willin的ajax嵌套评论貌似不用,我忘了

    2. Jutoy says:

      @zwwooooo 噢?手动刷新怎么操作? :?:

    3. zwwooooo says:

      @Jutoy 比较麻烦,去头像缓存目录把原来的头像删了

    4. Jutoy says:

      @Jutoy
      刚去Willin那里看了下原文章,他修改了代码,可以自动更新了哦,去看看吧~

    5. zwwooooo says:

      @Jutoy 哦,对了,我忘了我已经更新到他的最新版本了,唉,老了,记忆力不好了

  9. lp452 says:

    在 functions.php 里面找不到 get_avatar 的怎么办。。。 :oops:

    1. zwwooooo says:

      @lp452 找找comments.php有没有,没有的话说明你的主题没有自定义评论样式,你可以参照wp官方的例子自己添加进functions.php: http://codex.wordpress.org/Template_Tags/wp_list_comments

  10. haibor says:

    能不能做成JS版的?我对PHP不熟悉

    1. zwwooooo says:

      @haibor 不会就直接 CP(CopyPaste)吧,js 我不怎么会

  11. MOPVHS says:

    已嵌入简单 gravatar 头像缓存,留言留念...

  12. 悦来 says:

    谢谢 ,这方法确实很简单,但是如果有插件支持就更好了。

    1. zwwooooo says:

      @悦来 已经有类似插件了,也是国人做的,你找找,我忘了哪里了

  13. 阿邙 says:

    . 我也是找不到 comments.php 和function.php 中的语句. 貌似我的主题function.php 加密过的..

    1. zwwooooo says:

      @阿邙 还是自己折腾吧

  14. 阿邙 says:

    已经在折腾了 ,正在考虑重写function.php

    1. zwwooooo says:

      @阿邙 重写应该也不是很难,那主题的评论很特殊么?

    2. 阿邙 says:

      @zwwooooo 我怀疑他就没有定义评论样式 使用的默认的,我需要重定义一下.
      不过willin刚告诉我他正在研究新方法,让我不要乱动了.
      那就等他出结果吧.

    3. zwwooooo says:

      @阿邙 评论样式完全可以用css打造,我最初的主题就是。

  15. 我用的是MG12的 Elegant Box 主题.看了Willin大叔的这个教程,折腾了半天没有成功,最后还是在Willin大叔的帮助下,修改成功!刚有看了一下,他的修改方法!只是在function.php头部加入,就OK了! :razz: 再看了一下,是用的新版的!简单方便!

    1. zwwooooo says:

      @Mr.差不多 willin是高手

    2. @zwwooooo 我每天最重要的一项日程就是去看看大叔的BOKE! :mrgreen:

    3. zwwooooo says:

      @Mr.差不多 荒淫常来,当然我一般都会去访客那坐坐

  16. 麦子 says:

    都是牛人啊,嘿嘿

  17. snowxh says:

    <?php wp_list_comments( array ('avatar_size'=>48,'type'=>'comment'));?>

    请教这样的应该怎么改...木有function的东西 唔改了很多次都失败了

    1. zwwooooo says:

      @snowxh

      <?php wp_list_comments('type=comment&callback=这里填函数名'); ?>
    2. snowxh says:

      @zwwooooo 啦啦啦已经解决了 我终于能缓存了
      内牛满面。。

    3. zwwooooo says:

      @snowxh 来个牛肉拉面

    1. zwwooooo says:

      @洁 检查有没有放好默认图片

  18. FORECE says:

    刚才照你的修改了一下。发现需要把AVATAR文件夹放在根目录下才可以。。不然就会出现错误。

    1. zwwooooo says:

      @FORECE 大部分人的wp都是安装在根目录,wp-content文件夹就在根目录,所以正常啊,avatar就在根目录,没错。
      注意:avatar是跟wp-content同目录,不是在wp-content目录下

    2. FORECE says:

      @zwwooooo 汗,我没注意。这话说的这么有技巧。。。

    3. zwwooooo says:

      @FORECE 你不够细心读文章而已。 :mrgreen:

  19. 您好,冒昧的打扰了,我试着更改了文件,模仿了iNove 主题的代码,可惜不能使用。代码如下:

发表评论

昵称 *

网址

B em del U Link Code Quote