Personal WP Customization Notes (PWCN)

WordPressで実際に行ったカスタマイズの記録、発生した問題への対処時のメモ、ブロックテーマのカスタマイズなど

データのキャッシュ(一時保存)の仕方

WordPressには、例えば外部のデータなどをオンデマンドで取得せずに、optionsテーブルへ一定期間保存して、保存期間中はその情報を使うという機能があります。

これをキャッシュというのですが、それほど難しいコードを書くことなく設定できるので、備忘録を兼ねて紹介しておきます。

データのキャッシュ(一時保存)の仕方

簡単にこんなコードで実装できます。

function is_use_cache(){
//キャッシュデータの名前(他と重複しない一意のものを〇〇に指定)
$cache_key = '〇〇';

//キャッシュする期間を秒単位で指定
$cache_second = '3600';//1時間

//キャッシュが存在するかを確認する
$cached_data = get_transient( $cache_key );

キャッシュの有無によって処理を分ける
if ( false === $cached_data ) {
    //キャッシュデータがない場合
    $data = データを変数に格納する;
    //保存するデータをoptionsテーブルへ追加
    set_transient( $cache_key, $data , $cache_second );
}else{
    //キャッシュデータがある場合
    $data = $cached_data;
}

$data...に格納されたデータを使った処理を書く
}
フィルター・アクションフックなど..

つまり、キャッシュがなかったら後のコードで扱う値(ここでは$data)を作成しつつset_transient()でキャッシュに保存する、キャッシュがあれば後のコードで扱う値(ここでは$data)をデータベースから引いてきて使うということなんですね。

ちなみにテストなどで保存されたキャッシュを一旦削除したい時には以下のコードを使います。

function pwcn_delete_transient_data() {
//削除するキャッシュデータの名前
$cache_key = '〇〇';

delete_transient( $cache_key );
}
add_action( 'init', 'pwcn_delete_transient_data' );

【補足】ショートコードプログラムでキャッシュ使う場合の対処

実用編として、add_shortcode()を使って独自のショートコードを作る場合に、取得したデータをキャッシュする方法を補足しておきます。

前述したコードでは$cache_key = ‘〇〇’;と固定しているので、例えば同じ投稿内に同じショートコードが存在する場合は同じキーが使われます。

そうなると、投稿内にある複数のショートコードで同一のキーが存在すると判断され、すべてが同じデータを引っ張り出してきてしまうという不具合が発生します。

これを防ぐために、$cache_key = ‘〇〇’;の部分を以下のようにして、ショートコードのパラメーターをキャッシュキーの中に含めて(個別番号化、かつ暗号化する)保存するようにします。

$cache_key = '〇〇_' . md5( serialize( $atts ) );

1点注意が必要なのは、キャッシュキーをパラメーターを含めて個別に生成するという仕様上、一度ショートコードを挿入した後でパラメーター値を変更した場合には、別のキャッシュキーが生成されるため、キャッシュデータ(データペース内の行数)が増えてしまう可能性があることです。

通常WordPressの一時キャッシュの期間は12時間で、それを過ぎると期限切れとなり、同一のキャッシュキーに対するデータで上書きされるまでは、いわゆるゴミデータとして残ってしまうので、「Optimize Database after Deleting Revisions」など定期的にキャッシュを削除してくれるプラグインを使用するなどしてクリーンに保つことをおすすめします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

※リンクやURLの挿入されているコメントは無視します