WordPressでもキャッシュを使いたい
PHPで一時的にデータをキャッシュする場合、一番使われるのはセッション関数($_SESSION)ですねもちろんWordPressでも利用することは可能ですが、WordPressはセッション関数を推奨していません。
じゃあどうするんだって話になりますが、WordPress側でトランジェント(Transient)と呼ばれる仕組みが用意されています。
トランジェント (Transient) は、WordPressで一時的なデータをキャッシュするための仕組みです。データベースにキャッシュデータを保存し、設定された期間が過ぎると自動的に削除されます。これは、例えば、APIからのデータ取得や重いクエリの結果を一時的に保存しておくのに便利です。
(ChatGPT先生)
セッション関数と違うのは有効期限を設定できるので、キャッシュの管理がかなり便利になると思います。
実装自体もWordPressの標準機能なので、特別な設定やライブラリを使わずに簡単に使えます。
基本的な関数は以下の通りです。
set_transient( $transient, $value, $expiration )
: トランジェントを設定します。get_transient( $transient )
: トランジェントの値を取得します。delete_transient( $transient )
: トランジェントを削除します。
$value は保存する値で、変数の型はなんでもいけそうです
$expiration は有効期限で単位は秒ですね。 60とすると1分間 3600だと1時間となります。
set_transient()
トランジェントを設定するサンプルコードです。ここでは、example_transient
という名前のトランジェントに "Hello World"
という値を、1時間(3600秒)保存します。
1 2 3 4 5 6 7 8 9 10 11 12 |
// トランジェントを設定 $transient_name = 'example_transient'; $value = 'Hello World'; $expiration = 3600; // 1時間 $success = set_transient($transient_name, $value, $expiration); if ($success) { echo 'トランジェントが正常に設定されました。'; } else { echo 'トランジェントの設定に失敗しました。'; } |
get_transient()
トランジェントの値を取得するサンプルコードです。example_transient
という名前のトランジェントの値を取得し、存在する場合は表示します。
1 2 3 4 5 6 7 8 9 |
// トランジェントの値を取得 $transient_name = 'example_transient'; $value = get_transient($transient_name); if ($value !== false) { echo 'トランジェントの値: ' . $value; } else { echo 'トランジェントは存在しないか、期限が切れています。'; } |
デフォルトの設定ができないですが、処理をラップすれば簡単にできますね
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/** * トランジェントの値を取得し、存在しない場合はデフォルト値を返します。 * * @param string $transient トランジェントの名前(キー) * @param mixed $default トランジェントが存在しない場合に返すデフォルト値 * @return mixed トランジェントの値、またはデフォルト値 */ function get_custom_transient(string $transient, $default) { // トランジェントの値を取得 $value = get_transient($transient); // トランジェントが存在しない場合はデフォルト値を返す if ($value === false) { return $default; } // トランジェントが存在する場合はその値を返す return $value; } |
delete_transient()
トランジェントを削除するサンプルコードです。example_transient
という名前のトランジェントを削除します。
1 2 3 4 5 6 7 8 9 |
// トランジェントを削除 $transient_name = 'example_transient'; $success = delete_transient($transient_name); if ($success) { echo 'トランジェントが正常に削除されました。'; } else { echo 'トランジェントの削除に失敗しました。'; } |
ものすごく簡単です。