• サイトデザイン工事中です。ご意見をお寄せください
  • 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細

このWikiはいつでも誰でも編集できます

Transients API

提供:WordPress Codex 日本語版
移動: 案内, 検索

このページは 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);

例として、$special_query_results オブジェクトを12時間保存する方法を挙げます:

 set_transient('special_query_results', $special_query_results, 60*60*12); 

get_transient() で Transient データを取得する

保存された Transient データをオプションのように取得します:

get_transient($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);

上の例ではこのようになります:

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 を使うためにはプラグインやテーマに数行のコードを追加するだけですが、正しいシチュエーション(データベース負荷の高いデータや複雑な処理)で使えば、サイトのロード時間を節約することができます。

最新英語版: WordPress Codex » Plugins/Transients API最新版との差分

個人用ツール
名前空間
変種
操作
このサイトについて
特集
サーバ別情報
リファレンス
ドキュメント整備
ツールボックス
他の言語