当前位置:园子博客 » Wordpress » 缓存 Gravatar 头像到本地服务器

缓存 Gravatar 头像到本地服务器

7月 12th, 2010 | Filed under Wordpress | 共有10,277次浏览

先来说说我们最终要实现的效果,在文章的评论区域和使用 WP-RecentComments 插件实现的侧栏评论区域,这些显示了 Gravatar 头像的地方,把 Gravatar 头像全部缓存到本地服务器。

如果你不清楚如何自定义 wordpress 头像,可以点击这里查看详细教程。

缓存 Gravatar 头像到本地服务器的好处

最大的好处就是加载速度,把头像缓存到本地后,打开网页后不需要再到 gravatar 网站上去查询评论者的头像,因为我们已经把头像全部缓存到本地服务器了,速度当然快。

缓存 Gravatar 头像到本地服务器的方法

更新于2011-02-16,园子发布了缓存 Gravatar 头像到本地最简单的方法,这个方法更简单些,朋友们可以试下。

本文提供的缓存 Gravatar 头像至本地服务器的方法是不用插件来实现的,所以我们得多动手去修改些代码,过程如下:

1.点击这里下载 Generic Gravatar Cache 组件。

2.解压后,在 WordPress 根目录下建立一个名为 gravatar 的文件夹,把解压后文件上传到该文件夹内(解压后的文件包含两个文件夹:cache 和 profile,三个文件:index.php, .htaccess, mysql.sql)。

3.设置 cache 文件夹为 755 权限(一般默认就是这个权限,你可以在FTP软件中右键点击该文件夹选择“属性(CHMOD)”查看权限,如不是更改为755即可)。

4.在本地新建一个 avatar.php 文件,写入下面的代码并以 utf8 格式保存,上传到 profile 文件夹内(注意要将代码中出现的网址改成你自己的)。

<?php
$config['default'] = 'http://www.yzznl.cn/default-gravatar.png';//无头像时返回的默认头像路径
$config['rating'] = 'PG';//gravatar的内容级别
$config['size'] = 64;//头像尺寸
?>

5.设计一个默认的头像,命名为 default-gravatar.png,上传到 gravatar 文件夹内,你也可以点击这里下载园子设计的图片。

6.用记事本编辑刚刚上传过的 gravatar 文件夹内 .htaccess 文件,一般只需要更改第五行,原来的代码如下:

RewriteRule . index.php [L]

你需要将它更改为你所设置的实际目录,如园子的是:

RewriteRule . /gravatar/index.php [L]

7.这一步主要是设置评论区域的 Gravatar 头像缓存到本地。打开你使用主题中的 comments.php 文件,查找类似于如下的代码:

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

将它替换为:

<img src="http://www.yzznl.cn/gravatar/cache/avatar/<?php echo md5(strtolower($comment->comment_author_email));  ?>" alt="" />

8.这一步目的是要把使用了 WP-RecentComments 侧栏最新评论的头像也缓存到本地。

编辑插件目录下的 Core.php 文件,查找类似如下代码:

		// 当不包含默认头像时
		} else {
			$avatar = '<div class="rc_avatar rc_' . $position . '">' . get_avatar($email, $size) . '</div>';
		}

替换成:

		// 当不包含默认头像时
		} else {
			$avatar = '<div class="rc_avatar rc_' . $position . '">
<img src="http://www.yzznl.cn/gravatar/cache/avatar/'. md5(strtolower($email)) .'" alt="" width="32" height="32" /></div>';
		}

请注意更改成你的网址,保存即可看到侧栏最新评论的头像的缓存效果。

Gravatar 头像只缓存一部分的解决方法

如果你发现你在进行上述操作后,Gravatar 头像只缓存一部分,那么请查看自己是否使用了 WordPress thread comment 嵌套评论插件,你需要进入 WordPress thread comment 插件的后台设置中,找到“编辑评论的HTML”选项,找到其中的调用头像部分的代码也替换成如下代码即可解决。

<img src="http://www.yzznl.cn/gravatar/cache/avatar/<?php echo md5(strtolower($comment->comment_author_email));  ?>" alt="" />

使用 mg12 的 inove 主题的特别说明

这是专门针对使用 inove 主题的朋友们写的,请忽略上述过程的第7步,将第7上变成如下操作:

打开你使用主题中的 functions.php 文件,查找类似于如下的代码:

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

将它替换为:

<img src="http://www.yzznl.cn/gravatar/cache/avatar/<?php echo md5(strtolower($comment->comment_author_email)); ?>" alt="" width="32" height="32" />

请注意将网址替换成自己的哦。

万戈所提供的缓存 Gravatar 头像到本地服务器方法

1.前六步和上面提到的“缓存 Gravatar 头像到本地服务器的方法”一样。

2.打开 WordPress 目录下的 wp-includes/pluggable.php 文件,查找类似于如下的代码,大概是在1587行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
if ( !function_exists( 'get_avatar' ) ) :
function get_avatar( $id_or_email, $size = '96', $default = '', $alt = false ) {
	if ( ! get_option('show_avatars') )
		return false;
 
	if ( false === $alt)
		$safe_alt = '';
	else
		$safe_alt = esc_attr( $alt );
 
	if ( !is_numeric($size) )
		$size = '96';
 
	$email = '';
	if ( is_numeric($id_or_email) ) {
		$id = (int) $id_or_email;
		$user = get_userdata($id);
		if ( $user )
			$email = $user->user_email;
	} elseif ( is_object($id_or_email) ) {
		// No avatar for pingbacks or trackbacks
		$allowed_comment_types = apply_filters( 'get_avatar_comment_types', array( 'comment' ) );
		if ( ! empty( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (array) $allowed_comment_types ) )
			return false;
 
		if ( !empty($id_or_email->user_id) ) {
			$id = (int) $id_or_email->user_id;
			$user = get_userdata($id);
			if ( $user)
				$email = $user->user_email;
		} elseif ( !empty($id_or_email->comment_author_email) ) {
			$email = $id_or_email->comment_author_email;
		}
	} else {
		$email = $id_or_email;
	}
 
	if ( empty($default) ) {
		$avatar_default = get_option('avatar_default');
		if ( empty($avatar_default) )
			$default = 'mystery';
		else
			$default = $avatar_default;
	}
 
	if ( !empty($email) )
		$email_hash = md5( strtolower( $email ) );
 
	if ( is_ssl() ) {
		$host = 'https://secure.gravatar.com';
	} else {
		if ( !empty($email) )
			$host = sprintf( "http://%d.gravatar.com", ( hexdec( $email_hash{0} ) % 2 ) );
		else
			$host = 'http://0.gravatar.com';
	}
 
	if ( 'mystery' == $default )
		$default = "$host/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}"; // ad516503a11cd5ca435acc9bb6523536 == md5('unknown@gravatar.com')
	elseif ( 'blank' == $default )
		$default = includes_url('images/blank.gif');
	elseif ( !empty($email) && 'gravatar_default' == $default )
		$default = '';
	elseif ( 'gravatar_default' == $default )
		$default = "$host/avatar/s={$size}";
	elseif ( empty($email) )
		$default = "$host/avatar/?d=$default&amp;s={$size}";
	elseif ( strpos($default, 'http://') === 0 )
		$default = add_query_arg( 's', $size, $default );
 
	if ( !empty($email) ) {
		$out = "$host/avatar/";
		$out .= $email_hash;
		$out .= '?s='.$size;
		$out .= '&amp;d=' . urlencode( $default );
 
		$rating = get_option('avatar_rating');
		if ( !empty( $rating ) )
			$out .= "&amp;r={$rating}";
 
		$avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
	} else {
		$avatar = "<img alt='{$safe_alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
	}
 
	return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}
endif;

修改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
if ( !function_exists( 'get_avatar' ) ) :
function get_avatar( $id_or_email, $size = '96', $default = '', $alt = false ) {
    if ( ! get_option('show_avatars') )
        return false;
 
    if ( false === $alt)
        $safe_alt = '';
    else
        $safe_alt = esc_attr( $alt );
 
    if ( !is_numeric($size) )
        $size = '96';
 
    $email = '';
    if ( is_numeric($id_or_email) ) {
        $id = (int) $id_or_email;
        $user = get_userdata($id);
        if ( $user )
            $email = $user->user_email;
    } elseif ( is_object($id_or_email) ) {
        if ( isset($id_or_email->comment_type) && '' != $id_or_email->comment_type && 'comment' != $id_or_email->comment_type )
            return false; // No avatar for pingbacks or trackbacks
 
        if ( !empty($id_or_email->user_id) ) {
            $id = (int) $id_or_email->user_id;
            $user = get_userdata($id);
            if ( $user)
                $email = $user->user_email;
        } elseif ( !empty($id_or_email->comment_author_email) ) {
            $email = $id_or_email->comment_author_email;
        }
    } else {
        $email = $id_or_email;
    }
 
 
        $host = 'http://www.yzznl.cn';  //注意这里要修改为你的博客的地址
 
    if ( !empty($email) ) {
        $out = "$host/gravatar/cache/avatar/";
        $out .= md5( strtolower( $email ) );
 
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    } else {
        $avatar = "<img alt='{$safe_alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
    }
 
    return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}
endif;

请注意将代码中出现的 http://www.yzznl.cn 替换成你自己的网址即可。

刷新页面即可看到头像已经缓存到本地了。

园子温馨提醒:

进行修改代码的操作时,一定要记得备份源文件,这样一旦出错可以马上恢复。

小知识:关于 Gravatar

Gravatar 的概念首先是在国外的独立 WordPress 博客中兴起的,当你到任何一个支持 Gravatar 的网站留言时,这个网站都就会根据你所提供的 Email 地址为你显示出匹配的头像。当然,这个头像,是需要你事先到Gravatar的网站注册并上传的,否则,在这个网站上,就只会显示成一个由网站管理者所设置的默认头像。

  1. 刚哥
    9月 23rd, 201121:50

    刚申请了,不知道在园子博客有没有用哦

  2. miao
    5月 5th, 201111:38

    想试下,不过看博主自己的blog也并没有去缓存?为何

  3. Smilence
    4月 6th, 201118:12

    有个问题,图片放本地服务器,如果用户更新了他的头像咋办?还是显示旧头像

    • 园子
      4月 8th, 201120:23

      @Smilence
      代码里面设置是一定的时间自动更新的。

  4. 小熊SEO博客
    3月 27th, 201114:54

    zblog的如何使用qq头像呢?

  5. 加气混凝土设备
    3月 14th, 201115:11

    好像有点意思啊

  6. sypxue
    10月 24th, 201019:23

    不得言 :
    对博主来说确实是个不错的操作。能提升自己的速度了。但对于用户来说,仅仅来一次或两次,你在人家的电脑里留下更多的“临时文件”,多少有点那个。哈哈~

    不是你所认为的那样的,gravatar 插件的功能是 你问它要一个用户头像,它从gravatar 的服务器查询一下,返回图像,但是,有了缓存之后,只在新用户评论时查询一次该用户的头像,而后就可以直接从 博主的博客下载用户头像了。如果真的要说这样有什么不好的话,应该是这样:
    人家只不过是夸(扁)了博主一句,你就把人家的照片给留下来了!
    至于”临时文件”之类,纯属误解。

    • 园子
      10月 25th, 201011:58

      @sypxue
      呵呵 正解哈
      缓存是缓存在我自己的服务器上的
      你们是缓存到用户电脑上的。

  7. 优得客
    10月 24th, 201019:03

    我自己搭建的Windows主机,没有.htaccess文件,怎么版呢? 😈

    • 园子
      10月 25th, 201011:59

      @优得客
      关键是看你的主机支持不支持 .htaccess文件
      没有的话可以新建个测试有用没有。

  8. Yep
    9月 20th, 201000:18

    俺那还没多少头像 欢迎博主去留个~~~

  9. Bee君
    7月 22nd, 201017:27

    @园子
    哈哈,这个是Google reader 10000+的后果~你的都十几个未读~

  10. 生力军
    7月 22nd, 201009:10

    @Bee君
    哥哥 你去我的博客上面 灌水吧!谢谢!欢迎····························

  11. 园子
    7月 22nd, 201009:07

    @Bee君
    额滴神啊
    你真是灌水之王
    一排全是你的头像
    哈哈
    继续努力吧。

  12. Bee君
    7月 21st, 201023:47

    我是用yinheli的插件,不够我还是没有缓存头像

  13. Junan
    7月 20th, 201006:24

    之前也用过这个插件、好像是可以设置评论者的QQ头像的~~~后来还是没有用了~~有冲突、~~

  14. liveasx
    7月 18th, 201008:06

    我的博客下载头像很慢,经常看不见图片,需要试下这个办法

  15. iseeyou
    7月 16th, 201023:16

    改的麻烦。。。放弃

  16. 读者家
    7月 16th, 201017:22

    关键还是要看别人的访问速度了

  17. WordPress啦
    7月 15th, 201014:32

    这个很不错哦!

  18. A.shun
    7月 15th, 201011:44

    插件的没意思呢
    用willin kan的Gravatar cache mini

  19. Pavel
    7月 15th, 201009:58

    我用不到了
    Gravatar的加载速度应该比我的网站还快

  20. 卢松松
    7月 15th, 201009:25

    很有用,zblog不知道行不

  21. 八五学社
    7月 14th, 201019:25

    看起来很不错的方法,但有个疑问,要缓存多少头像才能缓全呀,更新不麻烦吗

    • 园子
      7月 15th, 201008:48

      @八五学社
      一个头像一般都是不到3KB,即使你缓存1000个,也才不到3M而已~

  22. 先看看
    7月 14th, 201017:22

    这个的确有点意思

  23. 益酷网
    7月 14th, 201017:13

    看看,学习一下!

  24. 不得言
    7月 14th, 201011:40

    对博主来说确实是个不错的操作。能提升自己的速度了。但对于用户来说,仅仅来一次或两次,你在人家的电脑里留下更多的“临时文件”,多少有点那个。哈哈~

  25. 619
    7月 14th, 201004:03

    我感觉没多大必要哦

  26. 周先生
    7月 14th, 201000:45

    我记得以前有个老兄开发了个小插件的,就是头像缓存。

  27. 刘晓林
    7月 13th, 201022:46

    那你得要储存很多啊,!

  28. 记忆盒子
    7月 13th, 201018:43

    你的文章越来越有技术含量了呀,你的写博热情也很高涨。

  29. 雅岚
    7月 13th, 201016:54

    一切为了速度。。。
    原来想弄一个酱紫滴
    结果看了半天代码把我看晕了,哈哈

  30. 老饕
    7月 13th, 201013:26

    貌似3.0之后就没有必要了

  31. 风吟
    7月 13th, 201012:49

    卧铺死就是烦一段代码可以搞定的事要修改N个文件

  32. 剑灵
    7月 13th, 201010:52

    学习了,向博主致谢

  33. sohoyeah
    7月 13th, 201000:07

    搞的蛮复杂不是,哈

  34. reizhi
    7月 12th, 201021:58

    yiqian试过,弄了好久没成功,于是就放弃了

  35. 股票推荐
    7月 12th, 201021:44

    反正图片都不大,让他在线下载算了,折腾很累啊。

  36. 可乐
    7月 12th, 201019:29

    没ZBLOG什么事阿`

  37. John
    7月 12th, 201017:24

    这个内容最后的头像图片还是保存在Gravatar网站吗?

    • 园子
      7月 12th, 201018:12

      @John
      已经缓存到本地了
      你可以查看图片地址看看~

  38. 睿智小超人
    7月 12th, 201017:00

    好复杂啊。

  39. 软件盒子
    7月 12th, 201016:59

    这个我就不实施了,呵呵我怕麻烦

  40. 做爱做的事
    7月 12th, 201016:54

    头像是很好玩的哦

  41. 奶牛
    7月 12th, 201014:23

    啦啦啦,奶牛来咯,方法蛮不错的说~~~

  42. Leyond
    7月 12th, 201013:32

    看看了啊 很详细的

  43. 天天天蓝
    7月 12th, 201013:16

    是不是搞读者墙的速度就快了……

  44. 煮茶老头
    7月 12th, 201013:12

    先收藏了,到时候试试

  45. SErHo
    7月 12th, 201012:57

    这个不折腾了,感觉自己不是速度控。

  46. 蛋卷
    7月 12th, 201012:09

    学习啦

  47. ifenwen
    7月 12th, 201010:48

    这个蛮详细的

  48. 快乐的村长
    7月 12th, 201010:10

    有意思的设置。。

  49. 丕子
    7月 12th, 201009:21

    这个很久之前在wange那里学到了 使用了 又让我去掉了

您必须在 登录 后才能发布评论.