WordPress终极优化指南–Gravatar头像优化
WordPress终极优化指南–Gravatar头像优化
教程总目录:WordPress终极优化指南
Gravatar头像是一项免费的服务,如果你在Gravatar的服务器上放置了你自己的头像,那么在任何支持Gravatar的blog或者留言本上留言时,只要提供你与这个头像关联的email地址,就能够显示出你的Gravatar头像来。
他有很多优点,但是缺点也是特别突出。
因为头像全部需要从Gravatar服务器来加载,不可避免的就会出现加载速度的问题。特别是在天朝,墙的存在更加突出了这个问题。
Gravatar还引入了多个重定向,这进一步降低了网站的响应速度。
下面说下如何解决Gravatar头像速度慢的问题:
1.在网站禁用Gravatar头像
2.从帖子中删除垃圾邮件和过多的评论
3.配置WordPress一次只显示几条评论,不要加载过多
4.使用Gravatar的缓存插件将头像缓存到服务器。
Gravatar头像缓存到服务器教程:
1.wp-content目录下创建一个名为avatar的目录,权限755,用户组www
2.准备一张默认头像,命名为default.jpg。放到创建的avatar文件夹里,默认头像大小是 32*32,可在下面代码第 1 行更改。
3.functions.php 的最后一个 ?> 的前面;
4.在需要使用 Gavatar 头像的地方调用 my_avatar 函数即可。一般在主题所有文件中,将 get_avatar 函数替换为 my_avatar 。有个例外,functions.php评论列表函数中:get_avatar( $comment 需要改为 my_avatar( $comment->comment_author_email。因为 my_avatar 函数只能通过 Email 来调取用户头像,所以以上情况,需要将第一个参数改成 email 地址
下放代码中有个缓存时间,建议设置长点,一天是86400秒,想要设置多长时间直接乘上对应天数即可。
代码:
function my_avatar( $email = 'gravatarcache@ilxtx.com’, $size = ’32’, $default = ", $alt = ") {
// 设置$email默认值为一个不存在的邮箱,如:gravatarcache@ilxtx.com
// 防止空的$email导致出错
$f = md5( strtolower( $email ) );
// 以下代码将头像缓存到wp-content目录下
$a = WP_CONTENT_URL . '/avatar/’. $f . $size . '.png’;
$e = WP_CONTENT_DIR . '/avatar/’ . $f . $size . '.png’;
$d = WP_CONTENT_DIR . '/avatar/’ . $f . '-d.png’;
// 如果要将头像缓存到当前主题目录下,请将11-13行代码改成:
// $a = get_bloginfo('template_url’) . '/avatar/’. $f . $size . '.png’;
// $e = get_template_directory() . '/avatar/’ . $f . $size . '.png’;
// $d = get_template_directory() . '/avatar/’ . $f . '-d.png’;
if($default==")
$default = 'img20231205/gravatar.png’;
$t = 2592000; // 缓存有效期30天, 这里单位:秒
if ( !is_file($e) || (time() – filemtime($e)) > $t ) {
if ( !is_file($d) || (time() – filemtime($d)) > $t ) {
// 验证是否有头像
$uri = 'http://www.gravatar.com/avatar/’ . $f . '?d=404’;
$headers = @get_headers($uri);
if (!preg_match(“|200|", $headers[0])) {
// 没有头像,则新建一个空白文件作为标记
$handle = fopen($d, 'w’);
fclose($handle);
$a = $default;
}
else {
// 有头像且不存在则更新
$r = get_option('avatar_rating’);
$g = 'http://www.gravatar.com/avatar/’. $f. '?s=’. $size. '&r=’ . $r;
copy($g, $e);
}
}
else {
$a = $default;
}
}
$avatar = “<img alt='{$alt}’ src='{$a}’ class=’avatar avatar-{$size} photo’ height='{$size}’ width='{$size}’ />";
return apply_filters('my_avatar’, $avatar, $email, $size, $default, $alt);
}
如果以上步骤不会操作可以使用下方插件来解决,本人没有使用,可能存在一定的兼容性问题。不过不必担心,有问题直接停止插件即可
nix-gravatar-cache修改版