Twitter

@carrielis 可以的

WordPress Gravatar 头像缓存

in Wordpress // 30 Comments

最近 Gravatar 头像老是显示不能,google 之得一好方法。来自 Willin 方法,将 Gravatar 头像缓存到服务器,不错、够速度,故分享之。

首先在你的网站 wp-content 的同级目录建立:/avatar,权限设置:755,这是 Gravatar 的缓存路径。
准备一张适合你模板尺寸的默认头像,名为 default.jpg。
将下列代码复制到模板的 functions.php 下:

/* Mini Gavatar Cache by Willin Kan. */
function my_avatar( $email, $size = '42', $default = '', $alt = false ) {
  $alt = (false === $alt) ? '' : esc_attr( $alt );
  $f = md5( strtolower( $email ) );
  $w = get_bloginfo('wpurl');
  $a = $w. '/avatar/'. $f. '.jpg';
  $e = ABSPATH. 'avatar/'. $f. '.jpg';
  $t = 1209600; //設定14天, 單位:秒
  if ( empty($default) ) $default = $w. '/avatar/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;
    copy($g, $e); $a = esc_attr($g); //新頭像 copy 時, 取 gravatar 顯示
  }
  if (filesize($e) < 500) copy($default, $e);
  $avatar = "<img title='{$alt}' alt='{$alt}' src='{$a}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
  return apply_filters('my_avatar', $avatar, $email, $size, $default, $alt);
}
// -- END ----------------------------------------

上面第一行的 $size 可自定义头像大小,然后将所有 get_avatar()my_avatar(),大概 functions.php,comments.php,sidebar.php,comments-ajax.php 会有头像的地方有 get_avatar() 函数,因主题而已,自行修改。

注意 my_avatar() 的方法和 get_avatar() 有一点差别:
get_avatar() 可用 idemail,可写成 get_avatar($comment, $size= ...
my_avatar() 只能用 email,要改成 my_avatar($comment->comment_author_email, $size= ...
使用参数如下:<?php echo my_avatar( $email, $size, $default, $alt ); ?>

以上转自 Willin 的新版 Gravatar 缓存,其实后面还有第二个方法,不用修改模板的,但有点小缺陷,详见该文的后续部分。

30 responses to WordPress Gravatar 头像缓存

  1. finao / July 27, 2010 / Reply

    你好,一直在用你的8700 illumine 1.2主题,但我想做些小修改,不知能否方便提供下主题的THM及其他原素材。如果方便麻烦请mail下 谢谢:)feinao#gmail.com

    PS:字体你当初选用的是哪种,才能让中文较好的显示。

    • Alan / July 27, 2010 / Reply

      之前已經發過給你的啊,你查一下郵件,會不會進垃圾郵件了?

  2. 剑书 / August 30, 2010 / Reply

    不知何故,昨天晚上按照此方法将Gravatar缓存到服务器后(除了主题文件,多修改了一个wp-recentcomments),结果今天下午空间商发邮件告知CPU占用过高

    想来想去最近就改了这个,这有关系?不得以又还原,再观察看看Orz…

    • Alan / August 30, 2010 / Reply

      @剑书: 缓存只是把头像保存到服务器而已,没有其他动作了啊。当然我不知道会不会和 wp-recentcomments 有关。
      PS,不过当下载头像的时候,服务器的流量会增加,难道是这个?我对服务器方面的不懂。

  3. 扣剑 / April 9, 2011 / Reply

    请问你的代码高亮是什么插件的呢?还有为什么这一页是乱码的呢?

  4. 扣剑 / April 9, 2011 / Reply

    在ie8打开查看源码的时候。中文字都变成 鏈€杩?Gravatar 澶村儚鑰佹槸鏄剧ず涓嶈兘锛実oogle 涔嬪緱涓€濂芥柟娉曘€傛潵鑷

Leave a Reply