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;

追記: をかもとさんよりカスタムフィールド使わなくてもキャッシュができる Transients API というものがあるそうです。こちらデータベースキャッシュで wp_option の期限付き版のような感じです。後日これについてまとめさせて頂きます。

コメント

コメントは受け付けていません。