其实这个功能有很多种方法实现,有插件,有 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. 如果你用的是 MG12 的 Elegant 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" />'; } ?>
如果还有其他主题,我会陆续放上
注意:有些主机的特殊性可能无法使用这个功能,可以先试试插件能否成功运行再测试这个简单代码
» » » » 需转载请注明:转载自 ZWWoOoOo's Blog [ http://zww.me ]
» » » » 本文链接地址:http://zww.me/archives/24711



我用的好像是这个吧……忘记了
你肯定和我一样是CP党!嘿嘿
CP多有意思……最少的时间达到想要的效果~~
学习了。谢谢
我空间很慢就不缓存在本地了
很实用的文章,收藏
我用此方法就没成功过~
因为你没改对,又或者你的主机写权限什么的问题
暂时用不上!不过还是感谢分享!
以后定有用得上的时候。
呵呵,你的博客就像一个文本
@619
619凶悍的裸奔CSS主题…
这个很有用啊,收藏个 有空给弄弄
我开始就没弄明白,因为我是inove的山寨版,别的代码我都摸透了,就是模板看着眼前一黑,一直没去解剖它。
刚好你发了这么实用的
哈哈,能把inove山寨也很厉害啊
第一步成功了,头像缓存了。
顺便提醒,“把一个50×50的jpg图片改名为:default.jpg”
大小要根据情况而定,我的是32
我文章里也说了啊——虽然是后来补上的
这个我用插件了
国内主机似乎就不需要这样啦!

相反,国内主机才需要,因为国内主机快,gravatar 在国外会拖慢网站速度
先mark,等这几天忙完了在折腾wp
慢慢折腾
不建default.jpg行不行?
当然行,但如果出现有人没有头像的情况下会出错
出错?不是会自动生成的吗?
不会,加张default.jpg有这么难么?况且wp后退就有默认的图片,这个不需要这么纠结
....
哇咔咔,我都说了嘛
能放个我的主题方法不,谢谢啊。
@licream 你的主题按照上面的方法自己试试吧,我不可能把所有的主题都依个测试吧,如果这样我会累死的
不过有时间我会试试
@zwwooooo
- -嗯嗯。
弄这个效果最大的好处是什么?就是网站打开速度快了?
@星网 肯定快了~哈哈
@星网 不然我们瞎折腾干嘛呢?
过来光顾下~~
嗯,这个不错的方法,那要是自动刷新缓存的么?还是手动刷新?
@Jutoy 已经缓存了的头像如果更换了新头像就要手动刷新,但你用了willin的ajax嵌套评论貌似不用,我忘了
@zwwooooo 噢?手动刷新怎么操作?
@Jutoy 比较麻烦,去头像缓存目录把原来的头像删了
@Jutoy
刚去Willin那里看了下原文章,他修改了代码,可以自动更新了哦,去看看吧~
@Jutoy 哦,对了,我忘了我已经更新到他的最新版本了,唉,老了,记忆力不好了
在 functions.php 里面找不到 get_avatar 的怎么办。。。
@lp452 找找comments.php有没有,没有的话说明你的主题没有自定义评论样式,你可以参照wp官方的例子自己添加进functions.php: http://codex.wordpress.org/Template_Tags/wp_list_comments