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

「Transients API」の版間の差分

提供: WordPress Codex 日本語版
移動先: 案内検索
(2010年6月21日 (月) 00:09 Ramiy Transients_API)
 
(カテゴリー修正、フッターメタ情報整理)
1行目: 1行目:
このページは'''WordPress Transients API'''についての技術的な文書です。これはデータに名前と有効期限を設定して、データベース内に保存する標準的な方法です。〔訳注:一時的に保存されるべきデータを以下Transientと表記します〕
+
このページは '''WordPress Transients API''' についての技術的な文書です。これはデータに名前と有効期限を設定して、データベース内に保存する標準的な方法です。〔訳注:一時的に保存されるべきデータを以下「Transient」と表記します〕
  
Transients APIは[[Options API]]に似ていますが、有効期限という機能を使うことで、wp_optionsテーブルをデータ保存用に使うことを可能にします。
+
Transients API は [[Options API]]/[[:en:Options API|en]] に似ていますが、有効期限という機能を使うことで、wp_options テーブルをデータ保存用に使うことを可能にします。
  
また、Transient APIは本質的にキャッシングプラグインによってスピードアップされますが、Options APIはそうではないということも覚えておく必要があります。たとえば、memcacedプラグインはデータベース内ではなくメモリー内にTransientデータを保存します。こうした理由から、Transient APIは有効期限を持つデータのために使われるべきです。また、必ずデータベースに残っていると想定されるべきでもありません。そうではない場合もあるからです。
+
また、Transient API は本質的にキャッシングプラグインによってスピードアップされますが、Options API はそうではないということも覚えておく必要があります。たとえば、[http://wordpress.org/extend/plugins/memcached/ memcaced プラグイン]はデータベース内ではなくメモリー内に Transient データを保存します。こうした理由から、Transient API は有効期限を持つデータのために使われるべきです。また、必ずデータベースに残っていると想定されるべきでもありません。そうではない場合もあるからです。
  
この記事が想定する読者はWordPressのテーマ作者、プラグイン作者、および特定のデータを指定した期限だけキャッシュしたいと考えている人です。この文書はPHPの基本的な理解を必要とします。
+
この記事が想定する読者は WordPress のテーマ作者、プラグイン作者、および特定のデータを指定した期限だけキャッシュしたいと考えている人です。この文書は PHP の基本的な理解を必要とします。
  
 
<div id="Function_Reference">
 
<div id="Function_Reference">
11行目: 11行目:
 
</div>
 
</div>
 
<pre>
 
<pre>
  // Transientデータをデータベースに保存
+
  // Transient データをデータベースに保存
 
  set_transient($transient, $value, $expiration);
 
  set_transient($transient, $value, $expiration);
 
   
 
   
  // 保存されたTransientデータを取得
+
  // 保存された Transient データを取得
 
  get_transient($transient);
 
  get_transient($transient);
 
   
 
   
  // 保存されたTransientデータを削除
+
  // 保存された Transient データを削除
 
  delete_transient($transient);
 
  delete_transient($transient);
 
</pre>
 
</pre>
  
 
<div id="Using_Transients">
 
<div id="Using_Transients">
== Transientsデータの使用 ==
+
== Transients データの使用 ==
 
</div>
 
</div>
  
Transientデータをコード内で使うのは、{{Option Tags}}ととても似ています。
+
Transient データをコード内で使うのは、{{Option Tags}}ととても似ています。
  
 
<div id="Saving_Transients_with_set_transient()">
 
<div id="Saving_Transients_with_set_transient()">
=== set_transient()でTransientデータを保存する ===
+
=== set_transient() で Transient データを保存する ===
 
</div>
 
</div>
Transientデータをデータベースに保存するには、[[関数リファレンス/set_transient|set_transient]]を使います。
+
Transient データをデータベースに保存するには、[[関数リファレンス/set_transient|set_transient]] を使います。
  
 
  set_transient($transient, $value, $expiration);
 
  set_transient($transient, $value, $expiration);
  
 
*'''$transient'''  キャッシュデータの一意な識別子(ID)
 
*'''$transient'''  キャッシュデータの一意な識別子(ID)
*'''$value''' 保存するデータ。通常の変数でも、配列/オブジェクトでもよい。APIは複雑なデータをシリアライズします。
+
*'''$value''' 保存するデータ。通常の変数でも、配列/オブジェクトでもよい。API は複雑なデータをシリアライズします。
 
*'''$expiration''' データをリフレッシュするまでの有効期限を秒数で表したもの
 
*'''$expiration''' データをリフレッシュするまでの有効期限を秒数で表したもの
  
例として、$special_query_resultsオブジェクトを12時間保存する方法を挙げます:
+
例として、$special_query_results オブジェクトを12時間保存する方法を挙げます:
 
<pre>
 
<pre>
 
  set_transient('special_query_results', $special_query_results, 60*60*12);  
 
  set_transient('special_query_results', $special_query_results, 60*60*12);  
44行目: 44行目:
  
 
<div id="Fetching_Transients_with_get_transient()">
 
<div id="Fetching_Transients_with_get_transient()">
=== get_transient()でTransientデータを取得する ===
+
=== get_transient() で Transient データを取得する ===
 
</div>
 
</div>
保存されたTransientデータをオプションのように取得します:
+
保存された Transient データをオプションのように取得します:
  
 
  get_transient($transient);
 
  get_transient($transient);
  
*'''$transient''' Transientを特定する識別子。set_transient()で指定したもの
+
*'''$transient''' Transient を特定する識別子。set_transient() で指定したもの
  
上に挙げた$special_query_resultsの場合では、
+
上に挙げた $special_query_results の場合では、
 
<pre>
 
<pre>
 
  get_transient('special_query_results');
 
  get_transient('special_query_results');
 
</pre>
 
</pre>
もしTransientデータがすでに存在しないか、有効期限切れの場合、get_transientは<tt>false</tt>を返します。このチェックには通常の等価演算子<tt>==</tt>ではなく、厳密な等価演算子<tt>===</tt>を使うべきです。整数0(または"empty"の配列)を保存したい場合もあるからです。こうした仕組みで返り値<tt>false</tt>が想定されるため、Transientデータは単一の真偽値であってはなりません。配列に格納するか、整数に変換しましょう。
+
もし Transient データがすでに存在しないか、有効期限切れの場合、get_transient は <tt>false</tt> を返します。このチェックには通常の等価演算子 <tt>==</tt> ではなく、厳密な等価演算子 <tt>===</tt> を使うべきです。整数0(または "empty" の配列)を保存したい場合もあるからです。こうした仕組みで返り値 <tt>false</tt> が想定されるため、Transient データは単一の真偽値であってはなりません。配列に格納するか、整数に変換しましょう。
  
 
利用例:
 
利用例:
62行目: 62行目:
 
  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ブロック内のコードは取得するデータがないかどうかを確認するだけです。
+
上記のコードは Transient を取得し、$value に格納しています。if ブロック内のコードは取得するデータがないかどうかを確認するだけです。
  
 
<div id="Removing Saved Transients with delete_transient()">
 
<div id="Removing Saved Transients with delete_transient()">
 
=== delete_transient()でTransientsデータを削除する ===
 
=== delete_transient()でTransientsデータを削除する ===
 
</div>
 
</div>
Transientデータは最後にset_transient()関数を実行してから指定した秒数<tt>$expiration</tt>が経過すると自動的に消滅します。しかし、手動で強制的に削除することもできます。これは指定した動作(投稿の保存、カテゴリーの追加)などに応じてTransientデータをアップデートするのに役立ちます。
+
Transient データは最後に set_transient() 関数を実行してから指定した秒数 <tt>$expiration</tt> が経過すると自動的に消滅します。しかし、手動で強制的に削除することもできます。これは指定した動作(投稿の保存、カテゴリーの追加)などに応じて Transient データをアップデートするのに役立ちます。
  
 
  delete_transient($transient);
 
  delete_transient($transient);
  
*'''$transient''' set_transient()で指定されたTransientデータの識別子
+
*'''$transient''' set_transient() で指定された Transient データの識別子
  
 
上の例ではこのようになります:
 
上の例ではこのようになります:
84行目: 84行目:
 
== 完全な例 ==
 
== 完全な例 ==
 
</div>
 
</div>
上記の関数をすべて利用して、Transientデータを利用する例をお見せしましょう。
+
上記の関数をすべて利用して、Transient データを利用する例をお見せしましょう。
 
<pre>
 
<pre>
 
&lt;?php
 
&lt;?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);
 
  }
 
  }
 
   
 
   
  // $special_query_resultsを使います
+
  // $special_query_results を使います
 
?&gt;
 
?&gt;
 
</pre>
 
</pre>
<tt>delete_transient()</tt>を使った例も紹介します。この場合、<tt>edit_term</tt>アクションに関数を登録し、タグやカテゴリーが編集されたときに実行されるようにします(タームを編集することで保存したデータは無効になってしまうので、削除します)
+
<tt>delete_transient()</tt> を使った例も紹介します。この場合、<tt>edit_term</tt> アクションに関数を登録し、タグやカテゴリーが編集されたときに実行されるようにします(タームを編集することで保存したデータは無効になってしまうので、削除します)
 
<pre>
 
<pre>
 
  &lt;?php
 
  &lt;?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;
 
  ?&gt;
 
</pre>
 
</pre>
Transientを使うためにはプラグインやテーマに数行のコードを追加するだけですが、正しいシチュエーション(データベース負荷の高いデータや複雑な処理)で使えば、サイトのロード時間を節約することができます。
+
Transient を使うためにはプラグインやテーマに数行のコードを追加するだけですが、正しいシチュエーション(データベース負荷の高いデータや複雑な処理)で使えば、サイトのロード時間を節約することができます。
 +
 
 +
{{原文|Plugins/Transients API|90668}}<!-- 2010-06-20T20:09:46 Ramiy 版 -->
  
 
[[Category:上級トピック]]
 
[[Category:上級トピック]]
[[Category:WordPress Development]]
+
[[Category:WordPress の開発]]
 
[[Category:API]]
 
[[Category:API]]
[[Category:WordPress Database]]
+
[[Category:データベース]]
 +
 
 +
[[en:Plugins/Transients API]]

2010年11月19日 (金) 03:02時点における版

このページは 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 データをコード内で使うのは、Options API: add_option() /en, add_site_option() /en, delete_option() /en, delete_site_option() /en, form_option() /en, get_site_option() /en, get_site_url(), get_user_option() /en, get_option() /en, update_option() /en, update_site_option() /en, update_user_option() /en, wp_load_alloptions() /en

ととても似ています。

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

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