【WordPress】一定時間データをキャッシュしてレスポンス時間を短縮する方法
更新日:2022/12/19
WordPressはWebページが表示される度に、同じコードが処理されて、同じ結果が生成されることが多々あります。
この結果を一定時間だけデータベースに保存しておけばムダな処理を省け、レスポンス時間を短縮できます。
今回は、この方法についてお伝えします。
Transients API
WordPressにはTransients APIというものが組み込まれていて、このAPIを使用すると簡単に一定時間だけデータをキャッシュできます。
Transientは「一時的な」という意味があるので、Transients APIなら一時的に何かするAPIですね。
内容的には、optionsテーブルを操作する Option APIに定義されたいくつかの関数を指します。
ソースは、wp-includes/option.php です。
とても単純な仕組みなので、確認してみると勉強になります。
Transients APIの関数
Transients APIには6つの関数が用意されています。
その中の3つはマルチサイト用なので、よく使うのは残りの3つです。
キャッシュの作成:set_transient()
データをキャッシュに登録するときは、set_transient()関数を使用します。
定義
set_transient( $transient, $value, $expiration = 0 )
- $transient:キャッシュの名前。172文字以下
- $value:キャッシュする値。DBに登録する前にserialize()で保存可能な値に変換される。
- $expiration:無効になるまでの秒数。
- 戻り値:
true 値がセットされた
false セットされなかった
キャッシュの取得:get_transient()
キャッシュからデータを取得するときは、get_transient()関数を使用します。
定義
get_transient( $transient )
- $transient:キャッシュの名前。172文字以下
- 戻り値:
false以外 キャッシュされていたデータ
false データが無いまたは有効期限切れ
キャッシュの削除:delete_transient()
キャッシュからデータを削除するときは、delete_transient()関数を使用します。
定義
delete_transient( $transient )
- $transient:キャッシュの名前。172文字以下
- 戻り値:
true 削除成功
false 削除失敗またはデータが無い
マルチサイト用関数
マルチサイト用関数は、マルチサイト全体でデータをキャッシュするために使用します。
関数は次の3つです。
set_site_transient( $transient, $value, $expiration = 0 ) get_site_transient( $transient ) delete_site_transient( $transient )
これまで紹介した関数の名前に _site が挿入されているだけで、使い方は同じです。
使用例
Transients APIの使用例として、キャッシュがある時はその値を返して、ない時はコールバック関数からデータを取得してキャッシュに登録する関数を作成してみました。
function get_my_cache_data($transient,$expiration,$callback,$arg){
$data = get_transient($cache_key);
if( false !== $data ) return $data;
$result = false;
if (is_callable($callback)){
$result = call_user_func($callback, $arg);
set_transient($cache_key,$result,$timeout_seconds);
}
return $result;
}
引数の$transientと$expirationは、set_transient()関数と同じものです。
$callbackは、キャッシュにセットする値を返す関数です。
$argは、$callbackに渡す引数です。
この関数を使用した例がこちら。
$tagdata = get_my_cache_data('my_tag_data',60 * 60 * 5,'get_my_tag_data',0);
foreach($tagdata as $tag){
echo '<p>['.$tag.']</p>';
}
function get_my_tag_data($arg){
$posttags = get_tags();
$tag_data = [];
if ($posttags) {
foreach($posttags as $tag) {
$tag_data[] = $tag->name;
}
}
return $tag_data;
}
タグ名を配列にセットして、キャッシュしています。
更新日:2022/12/19
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。