通常 PHP フレームワークを活用していればキャッシュはフレームワークのものを使用したり、PHP を生で書いている場合は PEAR のキャッシュを利用したり(人それぞれです)します。WordPress の場合でも PEAR を利用しても良いですが、カスタムフィールドを用いてキャッシュを取るなんていうことも可能です。
キャッシュを使えるようにするコード
このコードを functions.php などに貼りつけます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class wbCache { public function get_cache($post_id, $key, $cachetime) { $timestamp_now = time(); $timestamp = get_post_meta($post_id, $key . '_time', true); if($timestamp == '') $timestamp = time(); $timestamp_add = $timestamp_now - $timestamp - $cachetime; if($timestamp_add > 0) { $value = false; } else { $value = get_post_meta($post_id, $key, true); } return $value; } public function save_cache($post_id, $key, $value) { update_post_meta($post_id, $key, $value); update_post_meta($post_id, $key . '_time', time()); } } |
使い方
以下のように使います。キャッシュからデータを取得する時に第三引数に時間を含めて取得します。キャッシュが指定した時間以上経過すると false が返ります。経過していなければデータが返ります。false が返ってくる場合は新しくデータを取得して保存します。
1 2 3 4 5 6 | $data = wbCache::get_cache($post->ID, 'hoge', 3600*24); if($data === false) { $data = '新しくデータを取得した。'; wbCache::save_cache($post->ID, 'hoge', $data); } echo $data; |
追記: をかもとさんよりカスタムフィールド使わなくてもキャッシュができる Transients API というものがあるそうです。こちらデータベースキャッシュで wp_option の期限付き版のような感じです。後日これについてまとめさせて頂きます。
コメント