北极寒流 » 网络资源 » WordPress头像本地缓存优化版代码 - 2013.02.19

WordPress头像本地缓存优化版代码

本站以前一直采用Willin Kan大神的WordPress头像本地缓存,不过有个问题一直困扰着我:Willin Kan的WordPress头像本地缓存代码对于同为默认头像的不同用户会生成不同的名称文件,这就导致了如果有很多没有设置Gravatar头像的用户留言,缓存后会产生大量的不同文件名的,实际是相同图片的默认头像,占用空间,拖累网络。

Willin Kan的WordPress头像本地缓存代码

/* Mini Gavatar Cache by Willin Kan. */
function my_avatar( $email, $size = '50', $default = '', $alt = '' ) {
  // $alt = (false === $alt) ? '' : esc_attr( $alt );
  $alt = ('' == $alt) ? '' :  $alt ;
  $f = md5( strtolower( $email ) );
  $a = get_bloginfo('wpurl'). '/avatar/'. $f. '.jpg';
  $e = ABSPATH. 'avatar/'. $f. '.jpg';
  $t = 1209600; //设定14天, 单位:秒
  if ( empty($default) ) $default = get_bloginfo('template_directory'). '/img/default.jpg';
  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);
  $lazy_avatar = get_bloginfo('template_directory'). '/img/grey.gif';//LazyLoad头像处理 不需要时,下面src='{$a}'
  $avatar = "<img title='{$alt}' alt='{$alt}' data-original='{$a}' src='{$lazy_avatar}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
  return apply_filters('my_avatar', $avatar, $email, $size, $default, $alt);
}

下面的是来自露兜的WordPress头像本地缓存优化版代码.

function my_avatar( $email, $size = '32', $default = '', $alt = '') {
$f = md5( strtolower( $email ) );
$a = WP_CONTENT_URL . '/avatar/'. $f . $size . '.png';
$e = WP_CONTENT_DIR . '/avatar/' . $f . $size . '.png';
$d = WP_CONTENT_DIR . '/avatar/' . $f . '-d.png';
if($default=='')
$default = 'http://www.ludou.org/default.jpg';//这里设置你的默认头像
$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);
}

使用方法

     1、在wp-content目录下新建一个目录,命名为avatar,权限设为755;
     2、将以上代码放到当前主题function.php的最后一个 ?> 的前面
     3、以上代码第8行换成你本地的默认头像地址
     4、这里默认头像大小是 32*32,可在以上代码第1行更改
     5、在需要使用Gavatar头像的地方调用 my_avatar 函数即可。一般在主题所有文件中,将 get_avatar 函数替换为 my_avatar 。有个例外,functions.php评论列表函数中:

get_avatar( $comment

需要改成:

my_avatar( $comment->comment_author_email

因为my_avatar函数只能通过Email来调取用户头像,所以以上情况,需要将第一个参数改成email地址。

资料来源:http://www.ludou.org/wordpress-gravatar-local-cache.html

19

WordPress头像本地缓存优化版代码

分享到:

最受欢迎的

  • N/A