WordPressには、例えば外部のデータなどをオンデマンドで取得せずに、optionsテーブルへ一定期間保存して、保存期間中はその情報を使うという機能があります。
これをキャッシュというのですが、それほど難しいコードを書くことなく設定できるので、備忘録を兼ねて紹介しておきます。
本ページ掲載のコードを使用するときは
本ページで掲載しているコードは、以下に了承した上で使用ください
- コードは商用・非商用問わず自由に使っていただいて構いませんが、コード追加による不具合やトラブルが発生しても当方では一切責任を負いません
- コードは有効化しているテーマのfunctions.php、style.cssなどへ追加することで機能します。それらのファイルへの変更を行うことに不安のある方は使用しないでください
- コードは本ページの公開日時点で私の環境において動作したものです。WordPressバージョン他環境の違いによって動作しないことがあります
- コードは、セキュリティ、コードの正確さなどにおいて完全なものではありません。中には紹介するコードを簡略化するために省略している部分があるものもありますので、ご自身でコードを十分に検証し、必要な部分の編集を行った上で使用するようにしてください
- 掲載しているのは参考コードです。自身の環境に合わせるための編集はご自身で対応いただく必要があります(コメント欄等から質問いただいても基本回答は致しません)
- 掲載しているコードの転載を禁じます(SNSで紹介いただいたり、本ページへのリンクを張っていただくことは大歓迎です)
データのキャッシュ(一時保存)の仕方
簡単にこんなコードで実装できます。
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」など定期的にキャッシュを削除してくれるプラグインを使用するなどしてクリーンに保つことをおすすめします。
コメントを残す