DBキャッシュ機能を実装 外部データなど任意の情報を一定期間キャッシュさせる

広告WordPress・PHP を学べる本

Amazonのアソシエイトとして、WordPress functions.phpは適格販売により収入を得ています。

概要説明

アクセス毎にデータを取得、プログラムの実行を行わなくてよい場合はDBにキャッシュさせるカスタマイズ。キー、インターバールを各種設定ができるようにしているのでfunctions.phpに定義を追加しておくことで高速化に使用できます。プラグインを使わずに任意のタイミングでキャッシュをさせたいといった場合に活用できます。

functions.php
/*----------------------------------------------------
 DBキャッシュ キャッシュ保存・キャッシュ取得
----------------------------------------------------*/
if ( ! function_exists( 'get_db_cache' ) ) {
    // キャッシュ取得(ない・期限切れは false)
    function get_db_cache( $cache_key, $interval ) {
        $key       = 'fsdbc_' . md5( $cache_key );
        $save_time = (int) get_option( $key . '-save-time' );
        if ( ! $save_time || ( time() - $save_time ) >= (int) $interval ) {
            return false;
        }
        $cache = get_option( $key . '-cache' );
        return ( $cache === '' || $cache === false ) ? false : $cache;
    }

    // キャッシュ保存(autoload しない)
    function set_db_cache( $cache_key, $data ) {
        $key = 'fsdbc_' . md5( $cache_key );
        update_option( $key . '-cache', $data, false );
        update_option( $key . '-save-time', time(), false );
    }
}

※ 2026 年 10 月に直しました。前の版はキーに自分の頭を付けていなかったため、下の削除の SQL で、名前が「-cache」で終わるほかのプラグインの設定まで消える恐れがありました。今は頭に fsdbc_ を付け、大きなデータでも全ページで読み込まれないように、autoload しない形で保存します。

WordPress には、期限つきで保存できる set_transient() / get_transient() もあります。新しく作るなら、こちらを使うほうがかんたんです。

使用方法 – 動作確認コード

// キャッシュ取得 ( キー, キャッシュ有効秒数 )
$cache = get_db_cache('cache_test', '86400');
if ( $cache === false ) {
    $data = 'test';

    // キャッシュ保存
    set_db_cache('cache_test', $data);

    // 動作検証用ログ debug.logに出力
    error_log( 'Check Log: set_db_cache ' . $data );

} else {
    $data = $cache;

    // 動作検証用ログ debug.logに出力
    error_log( 'Check Log: get_db_cache' . $cache );
}
  • APIからの別サイトからのデータ取得を毎回行う必要がない場合はキャッシュさせる
  • 人気ランキングなど重い処理の表示データをキャッシュさせる

キャッシュデータの確認、削除

簡易キャッシュの確認
SELECT option_name, option_value FROM `wp_options` WHERE `option_name` LIKE 'fsdbc\_%';

簡易キャッシュの削除(このコードで作ったものだけ)
DELETE FROM `wp_options` WHERE `option_name` LIKE 'fsdbc\_%';

※ wp_ は、使っているテーブルの頭(接頭辞)に合わせます。消す前にバックアップを取ってください。

関連機能

  1. WordPress にウィジェットのエリアを足して、記事の下など好きな場所に出す:register_sidebar と dynamic_sidebar

  2. WordPress パンくずリスト表示用のショートコード

  3. WordPress 画像の alt が空・未設定のときに記事タイトルを自動で入れる(functions.php)

サイドバー

よく使うカスタマイズ

最近の記事

Profile

PAGE TOP