当サイト、Codex 日本語版は今後積極的な更新は行わない予定です。後継となる新ユーザーマニュアルは、https://ja.wordpress.org/support/ にあります。
万が一、当サイトで重大な問題を発見した際などは、フォーラムWordSlack #docs チャンネルでお知らせください。</p>

「Transients API」の版間の差分

提供: WordPress Codex 日本語版
移動先: 案内検索
({{Old}} 追加。翻訳の場合は最新版への更新が必要です。)
(en:Transients API 08:55, 21 August 2014 Amitsukapure 版を反映して和訳およびクリーンアップ。)
1行目: 1行目:
 
{{Rename|T}}
 
{{Rename|T}}
{{Old}}
+
{{CheckTrans}}
{{NeedTrans}}
+
  
このページは '''WordPress Transients API''' についての技術的な文書です。これはデータに名前と有効期限を設定して、データベース内に保存する標準的な方法です。〔訳注:一時的に保存されるべきデータを以下「Transient」と表記します〕
+
<div id="Overview">
 +
== 概要 ==
 +
</div>
 +
 
 +
このページは '''WordPress Transients API''' についての技術的な文書です。この API はキャッシュされるデータを一時的にデータベースへ保存するためのシンプルで標準化された方法を提供します。この方法ではデータに名前と有効期限を設定し、期限が来るとデータが削除されます。
 +
 
 +
<div class="information">訳注:一時的に保存されるべきデータを以下「Transient」と表記します。</div>
 +
 
 +
Transients API は [[Options API]] に似ていますが、有効期限という機能を使うことで、キャッシュされるデータを一時的に ''[[データベース構造#Table:_wp_options|wp_options]]'' テーブルへ保存するという処理をシンプルに実現します。
  
Transients API は [[Options API]]/[[:en:Options API|en]] に似ていますが、有効期限という機能を使うことで、wp_options テーブルをデータ保存用に使うことを可能にします。
+
'''参考''': 名前に「<tt>site_</tt>」がついた関数は基本的に、それがつかない関数と同じ機能を持ちますが、WordPress を[[用語集#マルチサイト|マルチサイト]]で使うときにネットワーク全体で利用できる点が異なります。
  
また、Transient API は本質的にキャッシングプラグインによってスピードアップされますが、Options API はそうではないということも覚えておく必要があります。たとえば、[http://wordpress.org/extend/plugins/memcached/ memcaced プラグイン]はデータベース内ではなくメモリー内に Transient データを保存します。こうした理由から、Transient API は有効期限を持つデータのために使われるべきです。また、必ずデータベースに残っていると想定されるべきでもありません。そうではない場合もあるからです。
+
'''参考''': Transient は本質的にキャッシングプラグインによってスピードアップされます。一方、Options API はそうではありません。たとえば [http://wordpress.org/extend/plugins/memcached/ memcached プラグイン]は、データベースではなく高速なメモリー内に Transient を保存します。こうした理由から、Transient は有効期限を持つデータのために使うべきです。また、必ずデータベースにあると想定してはなりません。そうではない場合もあるからです。
  
この記事が想定する読者は WordPress のテーマ作者、プラグイン作者、および特定のデータを指定した期限だけキャッシュしたいと考えている人です。この文書は PHP の基本的な理解を必要とします。
+
この記事が想定する読者は WordPress のテーマ作者、プラグイン作者、そして特定のデータをキャッシュする必要があるが指定した期限までに更新されるようにしたい(更新されなければ削除する)と考えている人です。この文書は PHP の基本的な理解を必要とします。
  
 
<div id="Function_Reference">
 
<div id="Function_Reference">
21行目: 28行目:
 
{| class="widefat"
 
{| class="widefat"
 
|- style="background:#464646; color:#d7d7d7;"
 
|- style="background:#464646; color:#d7d7d7;"
! '''Set/Get  Transient'''
+
! '''Transient の保存/取得'''
 
|-
 
|-
 
|
 
|
* [[関数リファレンス/set_transient | set_transient()]] /[[:en:Function_Reference/set_transient | en]]
+
* [[関数リファレンス/set_transient | set_transient()]] /[[:en:Function_Reference/set_transient|en]]
* [[関数リファレンス/get_transient | get_transient()]] /[[:en:Function_Reference/get_transient | en]]
+
* [[関数リファレンス/get_transient | get_transient()]] /[[:en:Function_Reference/get_transient|en]]
* [[関数リファレンス/set_site_transient | set_site_transient()]] /[[:en:Function_Reference/set_site_transient | en]]
+
* [[関数リファレンス/set_site_transient | set_site_transient()]] /[[:en:Function_Reference/set_site_transient|en]]
* [[関数リファレンス/get_site_transient | get_site_transient()]] /[[:en:Function_Reference/get_site_transient | en]]
+
* [[関数リファレンス/get_site_transient | get_site_transient()]] /[[:en:Function_Reference/get_site_transient|en]]
 
|}
 
|}
  
34行目: 41行目:
 
{| class="widefat"
 
{| class="widefat"
 
|- style="background:#464646; color:#d7d7d7;"
 
|- style="background:#464646; color:#d7d7d7;"
! '''Delete Transient'''
+
! '''Transient の削除'''
 
|-
 
|-
 
|
 
|
* [[関数リファレンス/delete_transient | delete_transient()]] /[[:en:Function_Reference/delete_transient | en]]
+
* [[関数リファレンス/delete_transient | delete_transient()]] /[[:en:Function_Reference/delete_transient|en]]
* [[関数リファレンス/delete_site_transient | delete_site_transient()]] /[[:en:Function_Reference/delete_site_transient | en]]
+
* [[関数リファレンス/delete_site_transient | delete_site_transient()]] /[[:en:Function_Reference/delete_site_transient|en]]
 
|}
 
|}
 
|}
 
|}
 
 
<pre>
 
// Transient データをデータベースに保存
 
set_transient($transient, $value, $expiration);
 
 
// 保存された Transient データを取得
 
get_transient($transient);
 
 
// 保存された Transient データを削除
 
delete_transient($transient);
 
</pre>
 
  
 
<div id="Using_Transients">
 
<div id="Using_Transients">
 +
== Transients API の使い方 ==
 +
</div>
  
== Transients データの使用 ==
+
<div id="Saving_Transients">
 +
=== Transient を保存する ===
 
</div>
 
</div>
  
Transient データをコード内で使うのは、{{Option Tags}}ととても似ています。
+
Transient を保存するには [[関数リファレンス/set_transient | <tt>set_transient()</tt>]] /[[:en:Function_Reference/set_transient|en]] を使います:
  
<div id="Saving_Transients_with_set_transient()">
+
set_transient( $transient, $value, $expiration );
=== set_transient() で Transient データを保存する ===
+
</div>
+
Transient データをデータベースに保存するには、[[関数リファレンス/set_transient|set_transient]] /[[:en:Function_Reference/set_transient|en]]を使います。
+
  
set_transient($transient, $value, $expiration);
+
; $transient : (''文字列'') キャッシュされるデータにつけるユニークな識別子。[http://core.trac.wordpress.org/ticket/15058 長さ 45 文字以下]であること。'''注意''': <tt>site_</tt> Transient を使う場合は 40 文字以下とする。
 +
; $value : (''配列|オブジェクト'') 保存するデータ。ふつうの変数または配列/オブジェクト。複雑なデータはこの API がシリアライズしてくれる。
 +
; $expiration : (''整数'') データを更新するまでの最大の秒数。Transient は $expiration より前に期限切れする場合があるが(外部オブジェクトキャッシュや、データベースのアップグレードによる)、$expiration を過ぎると値を決して返さない。
  
*'''$transient'''  キャッシュデータの一意な識別子(ID)
+
例えば $special_query_results オブジェクトを 12 時間保存しておくには次のようにします:
*'''$value''' 保存するデータ。通常の変数でも、配列/オブジェクトでもよい。API は複雑なデータをシリアライズします。
+
*'''$expiration''' データをリフレッシュするまでの有効期限を秒数で表したもの
+
  
例として、$special_query_results オブジェクトを12時間保存する方法を挙げます:
+
  set_transient( 'special_query_results', $special_query_results, 60*60*12 );
<pre>
+
  set_transient('special_query_results', $special_query_results, 60*60*12);  
+
</pre>
+
  
<div id="Using Time Constants">
+
<div id="Using_Time_Constants">
 
==== 時間の定数を使う ====
 
==== 時間の定数を使う ====
 
</div>
 
</div>
  
[[Version_3.5|WordPress 3.5]]では、簡単に時間を表現するために、いくつかの定数が導入されました。
+
[[Version_3.5|WordPress 3.5]] で、時間を表記しやすくするために定数がいくつか導入されました。
  
  MINUTE_IN_SECONDS  = 60 (seconds)
+
  MINUTE_IN_SECONDS  = 60 ()
  HOUR_IN_SECONDS    = 60 * MINUTE_IN_SECONDS
+
  HOUR_IN_SECONDS    = 60 * MINUTE_IN_SECONDS (1時間)
  DAY_IN_SECONDS    = 24 * HOUR_IN_SECONDS
+
  DAY_IN_SECONDS    = 24 * HOUR_IN_SECONDS   (1日)
  WEEK_IN_SECONDS    = 7 * DAY_IN_SECONDS
+
  WEEK_IN_SECONDS    = 7 * DAY_IN_SECONDS     (1週間)
  YEAR_IN_SECONDS    = 365 * DAY_IN_SECONDS
+
  YEAR_IN_SECONDS    = 365 * DAY_IN_SECONDS   (1年)
  
したがって、たとえば、上記のコードサンプルは次のように単純化することができます:
+
例えば、上記のコード例は次のようにシンプルにできます:
  
 
  set_transient( 'special_query_results', $special_query_results, 12 * HOUR_IN_SECONDS );
 
  set_transient( 'special_query_results', $special_query_results, 12 * HOUR_IN_SECONDS );
  
<div id="Fetching_Transients_with_get_transient()">
+
<div id="Fetching_Transients">
 
+
=== Transient を取得する ===
=== get_transient() で Transient データを取得する ===
+
 
</div>
 
</div>
  
保存された Transient データをオプションのように取得します:
+
保存された Transient を取得するには [[関数リファレンス/get_transient | <tt>get_transient()</tt>]] /[[:en:Function_Reference/get_transient|en]] を使います:
  
  get_transient($transient);
+
  get_transient( $transient );
  
*'''$transient''' Transient を特定する識別子。set_transient() で指定したもの
+
; $transient : (''文字列'') <tt>set_transient()</tt> で Transient を保存するときにつけたユニークな名前。
  
上に挙げた $special_query_results の場合では、
+
上の例で保存した $special_query_results を取得するには:
<pre>
+
get_transient('special_query_results');
+
</pre>
+
もし Transient データがすでに存在しないか、有効期限切れの場合、get_transient は <tt>false</tt> を返します。このチェックには通常の等価演算子 <tt>==</tt> ではなく、厳密な等価演算子 <tt>===</tt> を使うべきです。整数0(または "empty" の配列)を保存したい場合もあるからです。こうした仕組みで返り値 <tt>false</tt> が想定されるため、Transient データは単一の真偽値であってはなりません。配列に格納するか、整数に変換しましょう。
+
  
利用例:
+
$special_query_results = get_transient( 'special_query_results' );
 +
 
 +
もし Transient が存在しないか、有効期限切れの場合、<tt>get_transient()</tt> は <tt>false</tt> を返します。このチェックにはふつうの等価演算子 <tt>==</tt> ではなく、厳密な等価演算子 <tt>===</tt> を使うべきです。なぜなら、整数値 0(または他の "empty" や "false" っぽいデータ)を保存したい場合もあるからです。<tt>false</tt> がこのような意味を持つため、Transient に単一の真偽値 (<tt>true</tt>/<tt>false</tt>)を保存するのは避けるべきです。配列に格納するか、整数に変換しましょう。
 +
 
 +
使用例:
 
<pre>
 
<pre>
if (false === ($value = get_transient('value'))) {
+
if ( false === ( $value = get_transient( 'value' ) ) ) {
      // Transientが存在しない場合、この部分のコードが実行されます。
+
    // Transient が存在しない場合、この部分のコードが実行されます。
      $value = // ここで Transient の値を設定し直します
+
    $value = ... // ここで Transient の値を設定し直します
}
+
}
// $value に対して処理を行います
+
// $value に対して処理を行います
 
</pre>
 
</pre>
上記のコードは Transient を取得し、$value に格納しています。if ブロック内のコードは取得するデータがないかどうかを確認するだけです。
 
  
<div id="Removing Saved Transients with delete_transient()">
+
上記のコードは Transient を取得し、<tt>$value</tt> に格納しています。if ブロック内のコードは、取得すべき有効な Transient がないときだけ実行されます。
=== delete_transient()でTransientsデータを削除する ===
+
 
 +
<div id="Removing_Saved_Transients">
 +
=== 保存された Transient を削除する ===
 
</div>
 
</div>
Transient データは最後に set_transient() 関数を実行してから指定した秒数 <tt>$expiration</tt> が経過すると自動的に消滅します。しかし、手動で強制的に削除することもできます。これは指定した動作(投稿の保存、カテゴリーの追加)などに応じて Transient データをアップデートするのに役立ちます。
 
  
delete_transient($transient);
+
Transient は、最後に [[関数リファレンス/set_transient | <tt>set_transient()</tt>]] /[[:en:Function_Reference/set_transient|en]] を実行してから指定した秒数(<tt>$expiration</tt>)が経過すると自動的に消滅します。しかし、手動で強制的に削除することもできます。これは指定した動作(投稿の保存、カテゴリーの追加など)に応じて Transient を更新するのに役立ちます。
  
*'''$transient''' set_transient() で指定された Transient データの識別子
+
delete_transient( $transient );
  
上の例ではこのようになります:
+
; $transient : (''文字列'') <tt>set_transient()</tt> で Transient を保存するときにつけたユニークな名前。
  
delete_transient('special_query_results');
+
上の例で保存した $special_query_results を削除するには:
  
<div id="Complete Example">
+
delete_transient( 'special_query_results' );
  
 +
<div id="Complete_Example">
 
== 完全な例 ==
 
== 完全な例 ==
 
</div>
 
</div>
上記の関数をすべて利用して、Transient データを利用する例をお見せしましょう。
+
 
 +
上記の関数をすべて組み込んだ、Transient を利用するコードの例を示します。
 +
 
 
<pre>
 
<pre>
&lt;?php
+
<?php
// Transient データを取得する
+
// Transient データを取得する
if (false === ( $special_query_results = get_transient('special_query_results') ) ) {
+
if ( false === ( $special_query_results = get_transient( 'special_query_results' ) ) ) {
    // Transient データがなかったら、データを生成して保存する
+
    // Transient データがなかったら、データを生成して保存する
      $special_query_results = new WP_Query('cat=5&order=random&tag=tech&post_meta_key=thumbnail');
+
    $special_query_results = new WP_Query( 'cat=5&order=random&tag=tech&post_meta_key=thumbnail' );
      set_transient('special_query_results', $special_query_results);
+
set_transient( 'special_query_results', $special_query_results, 12 * HOUR_IN_SECONDS );
}
+
}
+
 
// $special_query_results を使います
+
// データ $special_query_results を使います...
?&gt;
+
?>
 
</pre>
 
</pre>
<tt>delete_transient()</tt> を使った例も紹介します。この場合、<tt>edit_term</tt> アクションに関数を登録し、タグやカテゴリーが編集されたときに実行されるようにします(タームを編集することで保存したデータは無効になってしまうので、削除します)
+
 
 +
[[関数リファレンス/delete_transient|<tt>delete_transient()</tt>]] /[[:en:Function_Reference/delete_transient|en]] を使った例も紹介します。この場合、<tt>[[プラグイン API/アクションフック一覧/edit_term|edit_term]]</tt> /[[:en:Plugin_API/Action_Reference/edit_term|en]] アクションに関数を登録し、カテゴリーやタグが編集されたときに実行されるようにします(タームを編集することで保存したデータが無効になるので削除したい、と仮定します)。
 +
 
 
<pre>
 
<pre>
&lt;?php
+
<?php
// Transient データを削除する関数を作成します
+
// Transient を削除する関数を作成します
function edit_term_delete_transient() {
+
function edit_term_delete_transient() {
      delete_transient('special_query_results');
+
    delete_transient( 'special_query_results' );
}
+
}
// 関数を edit_term フックに登録し、カテゴリーやタグが編集されたときに実行されるようにします
+
// 関数を edit_term アクションにフックし、カテゴリーやタグが編集されたときに実行されるようにします
add_action('edit_term', 'edit_term_delete_transient');
+
add_action( 'edit_term', 'edit_term_delete_transient' );
?&gt;
+
?>
 
</pre>
 
</pre>
  
Use transients with <tt>[[Class_Reference/WP_Query | WP_Query]]</tt> to retrieve "featured posts":
+
最後の例は、Transient を <tt>[[関数リファレンス/WP_Query | WP_Query]]</tt> と組み合わせて「先頭固定表示の投稿」を取得します:
<?php  
+
 
// Check for transient. If none, then execute WP_Query
+
<pre>
if ( false === ( $featured = get_transient( 'foo_featured_posts' ) ) ) {
+
<?php  
+
// Transient をチェックして、無ければ WP_Query を実行
      $featured = new WP_Query(
+
if ( false === ( $featured = get_transient( 'foo_featured_posts' ) ) ) {
  array(
+
 
'category' => 'featured',
+
    $featured = new WP_Query(
'posts_per_page' => 5
+
        array(
  ));
+
            'category' => 'featured',
 +
            'posts_per_page' => 5
 +
        ));
 
   
 
   
// Put the results in a transient. Expire after 12 hours.
+
    // 結果を Transient へ保存。12 時間後に無効にする。
set_transient( 'foo_featured_posts', $featured, 12 * HOUR_IN_SECONDS );
+
    set_transient( 'foo_featured_posts', $featured, 12 * HOUR_IN_SECONDS );
} ?>
+
} ?>
 
+
 
// Run the loop as normal
+
// ふつうにループを回す
<?php if ( $featured->have_posts() ) : ?>
+
<?php if ( $featured->have_posts() ) : ?>
 
+
 
 
     <?php while ( $featured->have_posts() ) : $featured->the_post(); ?>
 
     <?php while ( $featured->have_posts() ) : $featured->the_post(); ?>
          // featured posts found, do stuff
+
        // 先頭固定表示の投稿があったので、処理する(表示など)
 
     <?php endwhile; ?>
 
     <?php endwhile; ?>
   
+
 
    <?php else: ?>
+
<?php else: ?>
          // no featured posts found
+
    // 先頭固定表示の投稿がない場合
<?php endif; ?>
+
<?php endif; ?>
 
   
 
   
<?php wp_reset_postdata(); ?>
+
<?php wp_reset_postdata(); ?>
 +
</pre>
  
Transient を使うためにはプラグインやテーマに数行のコードを追加するだけですが、正しいシチュエーション(データベース負荷の高いデータや複雑な処理)で使えば、サイトのロード時間を節約することができます。
+
プラグインやテーマの中で Transient を使うためには数行のコードを追加するだけですが、適切な状況(データベース負荷の高いデータ検索や複雑なデータ処理)で使えば、サイトのロード時間を短縮することができます。
  
 
== 外部リソース ==
 
== 外部リソース ==
196行目: 195行目:
 
[http://www.warna.info/archives/1681/ http://www.warna.info/archives/1681/] Simple Colors - WordPressのTransients APIを用いて表示の高速化を図る
 
[http://www.warna.info/archives/1681/ http://www.warna.info/archives/1681/] Simple Colors - WordPressのTransients APIを用いて表示の高速化を図る
  
{{原文|Transients API|90668}}<!-- 2010-06-20T20:09:46 Ramiy 版 -->
+
{{原文|Transients API|145660}} <!-- 08:55, 21 August 2014 Amitsukapure 版 -->
  
 +
{{DEFAULTSORT:Transients API}}
 
[[Category:上級トピック]]
 
[[Category:上級トピック]]
 
[[Category:WordPress の開発]]
 
[[Category:WordPress の開発]]
203行目: 203行目:
 
[[Category:データベース]]
 
[[Category:データベース]]
 
[[Category:wp3.5]]
 
[[Category:wp3.5]]
 +
 
[[en:Transients API]]
 
[[en:Transients API]]

2015年8月12日 (水) 00:59時点における版

ページ名検討中: このページ名「Transients API」について改名が提案されています。ご意見をお寄せください。

この項目「Transients API」は、翻訳チェック待ちの項目です。加筆、訂正などを通して、Codex ドキュメンテーションにご協力下さい。

このページは WordPress Transients API についての技術的な文書です。この API はキャッシュされるデータを一時的にデータベースへ保存するためのシンプルで標準化された方法を提供します。この方法ではデータに名前と有効期限を設定し、期限が来るとデータが削除されます。

訳注:一時的に保存されるべきデータを以下「Transient」と表記します。

Transients API は Options API に似ていますが、有効期限という機能を使うことで、キャッシュされるデータを一時的に wp_options テーブルへ保存するという処理をシンプルに実現します。

参考: 名前に「site_」がついた関数は基本的に、それがつかない関数と同じ機能を持ちますが、WordPress をマルチサイトで使うときにネットワーク全体で利用できる点が異なります。

参考: Transient は本質的にキャッシングプラグインによってスピードアップされます。一方、Options API はそうではありません。たとえば memcached プラグインは、データベースではなく高速なメモリー内に Transient を保存します。こうした理由から、Transient は有効期限を持つデータのために使うべきです。また、必ずデータベースにあると想定してはなりません。そうではない場合もあるからです。

この記事が想定する読者は WordPress のテーマ作者、プラグイン作者、そして特定のデータをキャッシュする必要があるが指定した期限までに更新されるようにしたい(更新されなければ削除する)と考えている人です。この文書は PHP の基本的な理解を必要とします。

関数リファレンス

Transient の保存/取得
Transient の削除

Transients API の使い方

Transient を保存する

Transient を保存するには set_transient() /en を使います:

set_transient( $transient, $value, $expiration );
$transient 
(文字列) キャッシュされるデータにつけるユニークな識別子。長さ 45 文字以下であること。注意: site_ Transient を使う場合は 40 文字以下とする。
$value 
(配列|オブジェクト) 保存するデータ。ふつうの変数または配列/オブジェクト。複雑なデータはこの API がシリアライズしてくれる。
$expiration 
(整数) データを更新するまでの最大の秒数。Transient は $expiration より前に期限切れする場合があるが(外部オブジェクトキャッシュや、データベースのアップグレードによる)、$expiration を過ぎると値を決して返さない。

例えば $special_query_results オブジェクトを 12 時間保存しておくには次のようにします:

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

時間の定数を使う

WordPress 3.5 で、時間を表記しやすくするために定数がいくつか導入されました。

MINUTE_IN_SECONDS  = 60 (秒)
HOUR_IN_SECONDS    = 60 * MINUTE_IN_SECONDS  (1時間)
DAY_IN_SECONDS     = 24 * HOUR_IN_SECONDS    (1日)
WEEK_IN_SECONDS    = 7 * DAY_IN_SECONDS      (1週間)
YEAR_IN_SECONDS    = 365 * DAY_IN_SECONDS    (1年)

例えば、上記のコード例は次のようにシンプルにできます:

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

Transient を取得する

保存された Transient を取得するには get_transient() /en を使います:

get_transient( $transient );
$transient 
(文字列) set_transient() で Transient を保存するときにつけたユニークな名前。

上の例で保存した $special_query_results を取得するには:

$special_query_results = get_transient( 'special_query_results' );

もし Transient が存在しないか、有効期限切れの場合、get_transient()false を返します。このチェックにはふつうの等価演算子 == ではなく、厳密な等価演算子 === を使うべきです。なぜなら、整数値 0(または他の "empty" や "false" っぽいデータ)を保存したい場合もあるからです。false がこのような意味を持つため、Transient に単一の真偽値 (true/false)を保存するのは避けるべきです。配列に格納するか、整数に変換しましょう。

使用例:

if ( false === ( $value = get_transient( 'value' ) ) ) {
    // Transient が存在しない場合、この部分のコードが実行されます。
    $value = ... // ここで Transient の値を設定し直します
}
// $value に対して処理を行います

上記のコードは Transient を取得し、$value に格納しています。if ブロック内のコードは、取得すべき有効な Transient がないときだけ実行されます。

保存された Transient を削除する

Transient は、最後に set_transient() /en を実行してから指定した秒数($expiration)が経過すると自動的に消滅します。しかし、手動で強制的に削除することもできます。これは指定した動作(投稿の保存、カテゴリーの追加など)に応じて Transient を更新するのに役立ちます。

delete_transient( $transient );
$transient 
(文字列) set_transient() で Transient を保存するときにつけたユニークな名前。

上の例で保存した $special_query_results を削除するには:

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, 12 * HOUR_IN_SECONDS );
}

// データ $special_query_results を使います...
?>

delete_transient() /en を使った例も紹介します。この場合、edit_term /en アクションに関数を登録し、カテゴリーやタグが編集されたときに実行されるようにします(タームを編集することで保存したデータが無効になるので削除したい、と仮定します)。

<?php
// Transient を削除する関数を作成します
function edit_term_delete_transient() {
    delete_transient( 'special_query_results' );
}
// 関数を edit_term アクションにフックし、カテゴリーやタグが編集されたときに実行されるようにします
add_action( 'edit_term', 'edit_term_delete_transient' );
?>

最後の例は、Transient を WP_Query と組み合わせて「先頭固定表示の投稿」を取得します:

<?php 
// Transient をチェックして、無ければ WP_Query を実行
if ( false === ( $featured = get_transient( 'foo_featured_posts' ) ) ) {

    $featured = new WP_Query(
        array(
            'category' => 'featured',
            'posts_per_page' => 5
        ));
 
    // 結果を Transient へ保存。12 時間後に無効にする。
    set_transient( 'foo_featured_posts', $featured, 12 * HOUR_IN_SECONDS );
} ?>

// ふつうにループを回す
<?php if ( $featured->have_posts() ) : ?>

    <?php while ( $featured->have_posts() ) : $featured->the_post(); ?>
        // 先頭固定表示の投稿があったので、処理する(表示など)
    <?php endwhile; ?>

<?php else: ?>
    // 先頭固定表示の投稿がない場合
<?php endif; ?>
 
<?php wp_reset_postdata(); ?>

プラグインやテーマの中で Transient を使うためには数行のコードを追加するだけですが、適切な状況(データベース負荷の高いデータ検索や複雑なデータ処理)で使えば、サイトのロード時間を短縮することができます。

外部リソース

http://www.warna.info/archives/1681/ Simple Colors - WordPressのTransients APIを用いて表示の高速化を図る

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