このサイトではアフィリエイト広告(Amazonアソシエイトを含む)を利用しています。

WordPressのtransient キャッシュAPIを活用する

ウェブサイトには、「定期的に更新する必要はあるが、アクセスする都度はデータを更新する必要はない」という特徴のデータもありますね。例えば、アクセスランキングなどです。そういった場合、データをキャッシュに保存しておき、一定期間はキャッシュを参照する、という実装にすることで、サーバー負荷軽減・応答速度向上につながります。

WordPressでは、このようなキャッシュ機能を提供する Transient API が用意されています。

キャッシュ機能

update_option()等のオプションAPIで設定したデータは、delete_option()で削除するまではずっと有効になります。

「ずっと」ではなくて、一定時間だけ保存したい場合には、Transient APIを使います。Transient APIを使うと、データベースoptionsテーブルに、

  • データの中身を保存するオプション
  • オプションの有効期限を保存するオプション

の2つが保存されます。

追加、更新はset_transient()関数

set_transient()関数で、一定時間だけ保存したいデータを保存します。

set_transient( $transient, $value, $expireation );
// $transient : キャッシュの名前。
// $value : キャッシュの値
// $expireation : 有効期間を秒数で指定。デフォルトは0で、0を指定すると有効期限は無期限

例: 名前は sample、値は abcde、有効期間は30分後の場合

    set_transient( 'sample', 'abcde', 30 * MINUTE_IN_SECONDS  );

↑ のように書くと、一定期間有効なデータがoptionsテーブルに保存されます。_transient_******* に値が保存され、 _transient_timeout_******* に有効期限が保存されます。******* の部分はキャッシュの名前が入ります。

※なお、_transient_timeout_*******に保存される有効期限はUnixタイムスタンプです。人間に読みやすい時間への換算はUNIX時間の換算をごらんください。

get_transient()関数

キャッシュデータを取得するには get_transient()関数を使います。

get_transient( $transient );
// $transient : キャッシュの名前

例: 名前 sample のキャッシュを取得する場合

$cache_sample = get_transient( 'sample' );

get_transient()でデータベースからデータを取得できます。実行した時点で、キャッシュ有効期限を過ぎていた場合はfalseが返ります。

コードの例としては、↓ のようになります。

function get_transient_data(){
    // キャッシュデータがあれば、それを返して終了
    $data = get_transient( 'transient_data' );
    if ($data) {
        return $data;
    }
    
    // キャッシュがない場合は↓を実行
    $data = ....; // データを取得する処理を書く

    set_transient( 'transient_data', $data, MINUTE_IN_SECONDS * 60 ); // キャッシュを記録する
    return $data;
}

有効期限を指定するときは、WordPress で時間を便利に扱う で紹介した定数「MINUTE_IN_SECONDS : 分、 HOUR_IN_SECONDS : 時間、DAY_IN_SECONDS : 日、 WEEK_IN_SECONDS : 週、 MONTH_IN_SECONDS : 月、 YEAR_IN_SECONDS : 年」が便利です。

delete_transient()関数

キャッシュを削除したい場合は、delete_transient()関数が用意されています。

set_transient()で作成したキャッシュは、有効期限が経過すれば自動的に無効になります。また有効期限内でも再びset_transient()を実行すれば更新されます。このため、明示的に削除したいケースはあまりないかもしれません。

delete_transient( $transient );
// $transient : キャッシュの名前。

公開日:

↑このページへのリンク

フリーランスの営業力アップに最適!ホームページを営業マンにする自動見積もりフォーム「マイ見積