WordPress のカスタムフィールドを用いた簡易的なキャッシュ実装コード
通常 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;
(2012年02月07日 追記) 追記: をかもとさんよりカスタムフィールド使わなくてもキャッシュができる Transients API というものがあるそうです。こちらデータベースキャッシュで wp_option の期限付き版のような感じです。後日これについてまとめさせて頂きます。 (追記ここまで)
関連記事
- WordPress で投稿やページやカスタム投稿の公開時に処理を実行する方法
- WordPress のカスタム投稿タイプで get_page_by_path() を使う場合は第3引数に投稿タイプ名を入れる
- PHP が分からない人でも WordPress のカスタムフィールドを使ってカスタマイズする方法
- WordPress のページテンプレートの情報を取得する方法
- 1分でできる WordPress で直帰率の高いページだけに広告を表示させる方法
- CodeIgniter でデータベースを使ったシンプルなキャッシュを実装するサンプルコード
- WordPress のページで特定のスラッグの場合のみ任意の文字列を出力するコード
- WordPress のカスタムフィールドに特定の値がセットされている記事が存在するか調べる方法
- WordPress にはてブと Twitter と Facebook のボタンを10秒で貼り付けられるコード
- jQuery で Ajax でデータを POST 送信する際にオブジェクトで値を渡すと自動的にエンコードしてくれる
コメント
コメントは受け付けていません。