[转]缓存 Gravatar 头像到本地服务器
发现Gravatar很影响速度,于是打算干掉Gravatar。不过删除Gravatar总感觉少点什么,偶然间看到
胖子马这位设计师写的
《缓存 Gravatar 头像到本地服务器》http://seo3.ui90.com/q7-gravatar-cache.html
遂拿来用一下。
文章中的代码无效,调试了半天也没搞好,在Willin Kan.这里搞到新的代码,并安装使用了。
首先在主题的functions.php文件中追加一个函数。
/* Mini Gavatar Cache by Willin Kan. */ function my_avatar( $email, $size = '30', $default = '', $alt = '' ) { $alt = esc_attr( $alt ); $f = md5( strtolower( $email ) ); $w = WP_CONTENT_URL; // 如果想放在根目录,请使用get_bloginfo('wpurl'); $a = $w. '/avatar/'. $f. '.jpg'; $e = WP_CONTENT_DIR. '/avatar/'. $f. '.jpg'; // 如果想放在根目录请更改为ABSPATH. 'avatar/'. $f. '.jpg'; $t = 1209600; //设定头像更新时间(14天, 单位秒),可以设置长一些,毕竟大家的头像一般都是很长时间才更新。 if ( empty($default) ) $default = $w. '/avatar/avatar.png'; if ( !is_file($e) || (time() - filemtime($e)) > $t ){ //当头像不存在或超过14天再更新 $r = get_option('avatar_rating'); //$g = sprintf( "http://%d.gravatar.com", ( hexdec( $f{0} ) % 2 ) ). '/avatar/'. $f. '?s='. $size. '&d='. $default. '&r='. $r; //WP 3.0 的服务器 $g = 'http://www.gravatar.com/avatar/'. $f. '?s='. $size. '&d='. $default. '&r='. $r; //旧服务器(自动选择) copy($g, $e); $a = esc_attr($g); //复制到本地 } if (filesize($e) < 500) copy($default, $e); echo "<img title='{$alt}' alt='{$alt}' src='{$a}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />"; }
然后找到你主题中评论的模板
把get_avatar()的部分更改为my_avatar()
例如:<!--?php echo get_avatar($comment, $size='40', $default='' ); ?--> 改为:<?php echo my_avatar($comment->comment_author_email, $size='30', $default='', $alt=strip_tags($comment->comment_author) ); ?>
注意:调用此函数时需要给参数 $alt 赋值,不然 alt 同样不起作用,$alt 一般赋值为评论作者名。
在wp-content 文件夹下新建立一个 avatar 文件夹,
更改权限为755。这个文件夹就是将来缓存 Gravatar 头像的地方。
准备一张默认的头像图片,命名为:avatar.jpg,将其上传到 avatar 文件夹下面。
这张图片的作用就是如果用户没有定义过头像,就调用这张默认的头像。