- サイトデザイン工事中です。ご意見をお寄せください。
- 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細)
Transients API
このページは WordPress Transients API についての技術的な文書です。これはデータに名前と有効期限を設定して、データベース内に保存する標準的な方法です。〔訳注:一時的に保存されるべきデータを以下「Transient」と表記します〕
Transients API は Options API/en に似ていますが、有効期限という機能を使うことで、wp_options テーブルをデータ保存用に使うことを可能にします。
また、Transient API は本質的にキャッシングプラグインによってスピードアップされますが、Options API はそうではないということも覚えておく必要があります。たとえば、memcaced プラグインはデータベース内ではなくメモリー内に Transient データを保存します。こうした理由から、Transient API は有効期限を持つデータのために使われるべきです。また、必ずデータベースに残っていると想定されるべきでもありません。そうではない場合もあるからです。
この記事が想定する読者は WordPress のテーマ作者、プラグイン作者、および特定のデータを指定した期限だけキャッシュしたいと考えている人です。この文書は PHP の基本的な理解を必要とします。
目次 |
関数リファレンス
// Transient データをデータベースに保存 set_transient($transient, $value, $expiration); // 保存された Transient データを取得 get_transient($transient); // 保存された Transient データを削除 delete_transient($transient);
Transients データの使用
Transient データをコード内で使うのは、get_option, add_option, update_option, delete_option
ととても似ています。
set_transient() で Transient データを保存する
Transient データをデータベースに保存するには、set_transient を使います。
set_transient($transient, $value, $expiration);
- $transient キャッシュデータの一意な識別子(ID)
- $value 保存するデータ。通常の変数でも、配列/オブジェクトでもよい。API は複雑なデータをシリアライズします。
- $expiration データをリフレッシュするまでの有効期限を秒数で表したもの
例として、$special_query_results オブジェクトを12時間保存する方法を挙げます:
set_transient('special_query_results', $special_query_results, 60*60*12);
get_transient() で Transient データを取得する
保存された Transient データをオプションのように取得します:
get_transient($transient);
- $transient Transient を特定する識別子。set_transient() で指定したもの
上に挙げた $special_query_results の場合では、
get_transient('special_query_results');
もし Transient データがすでに存在しないか、有効期限切れの場合、get_transient は false を返します。このチェックには通常の等価演算子 == ではなく、厳密な等価演算子 === を使うべきです。整数0(または "empty" の配列)を保存したい場合もあるからです。こうした仕組みで返り値 false が想定されるため、Transient データは単一の真偽値であってはなりません。配列に格納するか、整数に変換しましょう。
利用例:
if (false === ($value = get_transient('value'))) {
// Transientが存在しない場合、この部分のコードが実行されます。
$value = // ここで Transient の値を設定し直します
}
// $value に対して処理を行います
上記のコードは Transient を取得し、$value に格納しています。if ブロック内のコードは取得するデータがないかどうかを確認するだけです。
delete_transient()でTransientsデータを削除する
Transient データは最後に set_transient() 関数を実行してから指定した秒数 $expiration が経過すると自動的に消滅します。しかし、手動で強制的に削除することもできます。これは指定した動作(投稿の保存、カテゴリーの追加)などに応じて Transient データをアップデートするのに役立ちます。
delete_transient($transient);
- $transient set_transient() で指定された Transient データの識別子
上の例ではこのようになります:
delete_transient('special_query_results');
完全な例
上記の関数をすべて利用して、Transient データを利用する例をお見せしましょう。
<?php
// Transient データを取得する
if (false === ( $special_query_results = get_transient('special_query_results') ) ) {
// Transient データがなかったら、データを生成して保存する
$special_query_results = new WP_Query('cat=5&order=random&tag=tech&post_meta_key=thumbnail');
set_transient('special_query_results', $special_query_results);
}
// $special_query_results を使います
?>
delete_transient() を使った例も紹介します。この場合、edit_term アクションに関数を登録し、タグやカテゴリーが編集されたときに実行されるようにします(タームを編集することで保存したデータは無効になってしまうので、削除します)
<?php
// Transient データを削除する関数を作成します
function edit_term_delete_transient() {
delete_transient('special_query_results');
}
// 関数を edit_term フックに登録し、カテゴリーやタグが編集されたときに実行されるようにします
add_action('edit_term', 'edit_term_delete_transient');
?>
Transient を使うためにはプラグインやテーマに数行のコードを追加するだけですが、正しいシチュエーション(データベース負荷の高いデータや複雑な処理)で使えば、サイトのロード時間を節約することができます。