这篇文章转自 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');
這個緩存方式不必改模板, 而且連後台都可用緩存頭像, 但有些缺點是: 多了程序會較耗資源和速度, 而且後台的頭像比較小, 緩存的頭像在前台比較難看.
另外, 你也許已發現, 代碼中有兩個可用正則匹配的地方, 故意改用字串函數, 目的是加快執行速度.
例: echo get_avatar( $id_or_email, $size = '42', $default = get_bloginfo('wpurl') . '/avatar/default.jpg' );
其中 $id_or_email 的部份要看你模板怎麼寫, 後面的 $default 所帶的就是默認頭像.
改良部份:
以前的版本在第一次 copy 頭像時無法顯示頭像 (因為緩存路徑還沒有產生頭像文件), 這新版在第一次沒頭像時, 會直接顯示 gravatar 的頭像.