WordPressでちょっとした項目をキャッシュしておく関数

WordPressでちょっとした項目をキャッシュしたい!というそんな要望からキャッシュ関数を作りました。

/**
* To cache data on wp_options.
* $callback function is call and store its data as serialized object.
* An optionname used in this function is  _periodic_cache_.$callback as defaul\
t.
*
* @return mixed */
function cache_($cache, $periodic = '1 hour', $param = array(),
$optionname = ''){
$optionname = $optionname
? $optionname
: '_periodic_cache_'.$callback;
$obj = get_option($optionname);
// revert $periodic to present time
if ($obj->modified < (time()*2 - strtotime($periodic)) ) {
$obj = new StdClass();
$obj->data = call_user_func_array($callback, $param);
$obj->modified = time();
update_option($optionname, $obj);
} else {
}
return $obj->data;
}

function c_($callback, $periodic='',$param = array(), $optionname=''){
return periodic_cache($callback, $periodic, $param, $optionname);
}

}

使い方は至って簡単。この関数の戻り値をキャッシュしたいな~、という時にこのキャッシュ関数を経由して呼び出せばOK。

例えばget_recent_posts()なんていう、最近の投稿一覧を取得する関数を作って、その値をキャッシュしたいのであれば

$posts = cach_('get_recent_posts', '20 hour', $param);

とすればおk。内部ではget_recent_posts()を$paramを引数として呼び出す。前回の呼び出しから20時間以内であればキャッシュを使用する。

これで簡単なものはキャッシュから読み出せるね。

削除の関数とかは作ってないよ。必要になったら作るかな~。

コメントを残す