把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) 会有一段像这样:
我用的启用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='' />
$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;
}
$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;
}
$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/'
路过!学习了...
我现在怕折腾,我的是DH空间速度马马虎虎,我是每次浏览完就清楚记录的人,基本没什么必要如此这般,其他朋友嘛,呵呵,很多人不在乎头像吧,我想!
先做个记录,谢了
@xiao6
谢谢路过~~ 😆
@joe
这个是在服务器缓存哦,你看下头像地址就知道了。因为老外那个gravatar.com太慢了,这么做访问会快些~
@derek
嗯 不用客气,什么时候想用的话来拿就是 😀
哇。似乎很不错 😢
@Blinux
是啊 还有一个小优点就是对于没有用gravatar的同学,可以给他们手动设置头像 哈哈
先来试试我新邮箱的头象正不正常~~~嘿 😉
@Lc.
汗。。我看成了你的邮箱换了新头像,赶紧去删缓存,结果刷新后还是一样 😢
@whisperer
哈哈。就是一样的
说实话缓存是个让我又爱又恨的东西。。。记得博客当时缓存那会儿,刚做的效果不会立刻显示,得Ctrl+F5刷才行,不然缓存仍保留原先效果,麻烦死了。
@Rui
对,缓存就是这样。我现在用super cache,所以修改主题的时候就先关了它。
不过这个gravatar缓存不太一样,这个实际上就是我把头像下载后放到自己服务器上,访客直接从我服务器上获得头像了。我需要不定时删除这些保存的头像,不然有人改头像后即使怎么刷新都不会有改变。
哈哈,当留言者数量增多时,头像确实是个技术方向。在这里都能看到万戈兄 😀 。。。。。。。。
我新站,whisperer加连。 😎
应该好好的研究一下
恩 按你的方法试试 呵呵
出现了怪异的情况 有的图片显示正常 有的是X, 图片ftp看了是存在的,但打开地址确是404.。。。
@BestDong
解决! 开始没有default.jpg就打开网页,之后才传默认图像导致的. 😈
@BestDong
呵呵 好了就成 😮
Permalink