新版Gravatar緩存

   这篇文章转自 Willin Kan的博客,这个地方值得大家去学习。

   因为我的使用的是其中的一种,所以另一种就不记录了,大家多去爬爬他的博客吧。

 

  先在你的網站 wp-content 的同級目錄建立資料夾: /avatar 權限: '0755', 這是準備 gravatar 緩存的路徑. (若權限: '0755' 不行, 試一下 '0777')準備一張適合你模板尺寸的默認頭像, 名為"default.jpg" 放在此路徑。

將下列代碼 copy 到模板的 functions.php:

function my_avatar($avatar) {

  $tmp = strpos($avatar, 'http');

  $g = substr($avatar, $tmp, strpos($avatar, "'", $tmp) - $tmp);

  $tmp = strpos($g, 'avatar/') + 7;

  $f = substr($g, $tmp, strpos($g, "?", $tmp) - $tmp);

  $w = get_bloginfo('wpurl');

  $e = ABSPATH .'avatar/'. $f .'.jpg';

  $t = 1209600; //設定14天, 單位:秒

  if ( !is_file($e) || (time() - filemtime($e)) > $t ) { //當頭像不存在或文件超過14天才更新

    copy($g, $e);

  } else  $avatar = strtr($avatar, array($g => $w.'/avatar/'.$f.'.jpg'));

  if (filesize($e) < 500) copy($w.'/avatar/default.jpg', $e);

  return $avatar;

}

add_filter('get_avatar', 'my_avatar');

 

 

這個緩存方式不必改模板, 而且連後台都可用緩存頭像, 但有些缺點是: 多了程序會較耗資源和速度, 而且後台的頭像比較小, 緩存的頭像在前台比較難看.
另外, 你也許已發現, 代碼中有兩個可用正則匹配的地方, 故意改用字串函數, 目的是加快執行速度.

注意: 因為這方法是掛在 get_avatar() 後面, 所以必須在 get_avatar() 定義 $default,
例: echo get_avatar( $id_or_email, $size = '42', $default = get_bloginfo('wpurl') . '/avatar/default.jpg' );
其中 $id_or_email 的部份要看你模板怎麼寫, 後面的 $default 所帶的就是默認頭像.

改良部份:
以前的版本在第一次 copy 頭像時無法顯示頭像 (因為緩存路徑還沒有產生頭像文件), 這新版在第一次沒頭像時, 會直接顯示 gravatar 的頭像.

发表评论