博客主机
A-A+

简单头像缓存函数my_avatar()

2014年09月05日 杂七杂八 暂无评论 阅读 521 次
博客主机
本文目录
[隐藏]

原创:Willin Kan

修改+整理:ZWWoOoOo

1.方法一:手动替换 get_avatar() 调用函数

(适合喜欢折腾的朋友,优点:据 willin 说速度较快,缺点:后台的头像需要修改WP源文件才能缓存)

一、前期工作

1. 在网站(博客)根目录建一个名为 avatar 的文件夹,保证其可写。(一般虚拟主机就755权限即可)

2. 自己制作或者Copy一个名称为 default.jpg 的图片作为默认头像,图片宽高根据自己主题设定,如 50*50,然后上传到第1步里面说的 avatar 文件夹里面。

3. 确定自己的主机支持 php 的  copy() 函数。(注:一般虚拟主机都支持)

4. 保证使用的 WordPress 版本在 v3.0 以上

二、函数

把下面的函数代码放到主题的 functions.php 文件里面(注意要放到 <?php ?> 里)

  1. /* Mini Gavatar Cache by Willin Kan. Modify by zwwooooo */  
  2.  function my_avatar( $email$size = '50', $default = ''$alt = false ) {  
  3.      $alt = (false === $alt) ? '' : esc_attr( $alt );  
  4.      $f = md5( strtolower$email ) );  
  5.      $w = home_url(); //$w = get_bloginfo('url');  
  6.      $a = $w. '/avatar/'. $f . '.jpg';  
  7.      $e = preg_replace('/wordpress\//', '', ABSPATH) . 'avatar/' . $f . '.jpg';  
  8.      $t = 604800; //设定7天, 单位:秒  
  9.      if ( emptyempty($default) ) $default = $w. '/avatar/default.jpg';  
  10.      if ( !is_file($e) || (time() - filemtime($e)) > $t ){ //当头像不存在或者文件超过7天才更新  
  11.          $r = get_option('avatar_rating');  
  12.          $g = sprintf( "http://www.gravatar.com", ( hexdec( $f{0} ) % 2 ) ). '/avatar/'. $f. '?s='. $size. '&d='. $default. '&r='. $r;  
  13.          copy($g$e);  
  14.      }  
  15.      if (filesize($e) < 500) copy($default$e);  
  16.      $avatar = "<img title='{$alt}' alt='{$alt}' src='{$a}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";  
  17.      return apply_filters('my_avatar', $avatar$email$size$default$alt);  
  18.  }  

三、修改调用

找到主题评论自定义函数,一般在 functions.php 文件里面,如果你的主题没有自定义评论函数,那么只能自己添加了——不在这篇文章讨论之内。一般就是把主题里面的 get_avatar() 函数替换为 my_avatar()

例如:<?php echo get_avatar($comment, $size='40', $default='' ); ?>

改为:<?php echo my_avatar($comment, $size='40', $default='' ); ?>

2.方法二:hook get_avatar() 函数模式

(适合新手、懒人,优点:后台也有效)

一、前期工作(同方法一)

二、函数

把下面的函数代码放到主题的 functions.php 文件里面(注意要放到 <?php ?> 里)

  1. function my_avatar_admin($avatar) {  
  2.      $tmp = strpos($avatar, 'http');  
  3.      $g = substr($avatar$tmpstrpos($avatar"'"$tmp) - $tmp);  
  4.      $tmp = strpos($g, 'avatar/') + 7;  
  5.      $f = substr($g$tmpstrpos($g"?"$tmp) - $tmp);  
  6.      $w = home_url(); // $w = get_bloginfo('url');  
  7.      $e = preg_replace('/wordpress\//', '', ABSPATH) .'avatar/'. $f .'.jpg';  
  8.      $t = 604800; //设定7天, 单位:秒  
  9.      if ( emptyempty($default) ) $default = $w. '/avatar/default.jpg';  
  10.      if ( !is_file($e) || (time() - filemtime($e)) > $t ) //当头像不存在或者文件超过7天才更新  
  11.          copy(htmlspecialchars_decode($g), $e);  
  12.      else  
  13.          $avatar = strtr($avatararray($g => $w.'/avatar/'.$f.'.jpg'));  
  14.      if (filesize($e) < 500) copy($default$e);  
  15.      return $avatar;  
  16.  }  
  17.  add_filter('get_avatar', 'my_avatar_admin');  

这样就OK了。

3.附:真正支持头像图片 alt 属性的 my_avatar()函数

折腾方法同“方法一”,下面只贴出函数部分

  1. /* Mini Gavatar Cache by Willin Kan. Modify by zwwooooo */  
  2.  function my_avatar( $email$size = '50', $default = ''$alt = '' ) {  
  3.      // $alt = (false === $alt) ? '' : esc_attr( $alt );  
  4.      $alt = ('' == $alt) ? '' :  $alt ;  
  5.      $f = md5( strtolower$email ) );  
  6.      $w = home_url(); //$w = get_bloginfo('url');  
  7.      $a = $w. '/avatar/'. $f . '.jpg';  
  8.      $e = preg_replace('/wordpress\//', '', ABSPATH) . 'avatar/' . $f . '.jpg';  
  9.      $t = 604800; //设定7天, 单位:秒  
  10.      if ( emptyempty($default) ) $default = $w. '/avatar/default.jpg';  
  11.      if ( !is_file($e) || (time() - filemtime($e)) > $t ){ //当头像不存在或者文件超过7天才更新  
  12.          $r = get_option('avatar_rating');  
  13.          $g = sprintf( "http://www.gravatar.com", ( hexdec( $f{0} ) % 2 ) ). '/avatar/'. $f. '?s='. $size. '&d='. $default. '&r='. $r;  
  14.          copy($g$e);  
  15.      }  
  16.      if (filesize($e) < 500) copy($default$e);  
  17.      $avatar = "<img title='{$alt}' alt='{$alt}' src='{$a}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";  
  18.      return apply_filters('my_avatar', $avatar$email$size$default$alt);  
  19.  }  

注意:调用此函数时需要给参数 $alt 赋值,不然 alt 同样不起作用,$alt 一般赋值为评论作者名。

例如:<?php echo get_avatar($comment, $size='40', $default='' ); ?>

改为:<?php echo my_avatar($comment, $size='40', $default='',  $alt=$comment->comment_author ); ?>

4.PS:我自用方法

我所使用的方法是结合上面说的两个方法,即前台用“附:整正支持 alt 的 my_avatar()函数”,后台用“方法二:hook get_avatar() 函数模式”,只要给方法二中的函数加个‘只在后台有效’的判断即可,如:if(is_admin()) { 方法二的函数代码 }

标签:
博客主机

给我留言