ちょっとしたキャッシュに便利、ワードプレスのtransient

製作 プログラム

最終更新日:2021/03/18

ラムネグから一言:寝る前に読むとくだらなすぎて逆に寝れると好評なすごい適当なブログをこっちではじめてます.

ワードプレスでこの情報は使いまわすからキャッシュ(一時保存)しておきたいなー、ということもあると思います。

よくあるのがツイッターやインスタなんかのAPIをたたいて手に入ったデータをキャッシュしとくとか。そうすることで時間ごとに叩ける回数が決まってるAPIをより安定して使えるようになりますよね。

ワードプレスにはこういう一時保存を簡単に実装できる仕組み、その名も「transient」がちゃんとあるんですね。さすがはワードプレス。

ではここではワードプレスのキャッシュ、transientについてその使い方、実装方法をサクッと紹介していきます。

  1. まずは完成形から
  2. 使うのは2つの関数だけ!
  3. get_transient()
  4. set_transient()
  5. まとめ

まずは完成形から

まずはサクッとワードプレスのキャッシュ機能を使うための完成形から。これそのまま使うだけでOKなやつ。

functions.phpに追加しよう

function my_transient(){
	$data = get_transient('①your_original_cache_name');
	if($data === false){
		~~②なんかAPI叩いたりとかの処理~~
		~~$dataに一時保存したいデータを入れる~~
		set_transient('①your_original_cache_name', $data, ③12 * HOUR_IN_SECONDS/* 12時間の設定 */);
	}
	return $data;
}

番号のついてる所を自分で埋めてくださいね。

  • ①番:なんでもOK。キャッシュの名前
  • ②番:一時保存したいデータを取得してる部分
  • ③番:一時保存する時間。例では12時間

使い方としてはキャッシュのデータが欲しいところで「my_transient()」を呼ぶだけ。超カンタン。

ここから下はコードの解説も踏まえながら、もう少し詳しくワードプレスのキャッシュの仕組みを見ていきますね。

使うのは2つの関数だけ!

ワードプレスでキャッシュを実装だなんてなんだか難しそう、ですよね。

でも恐ろしく簡単。なんといっても使う関数が2つだけ、というお手軽さ。ぼくもやってみましたが恐ろしく一瞬で実装できちゃいました。

ワードプレスでキャッシュするときに使う2つの関数、それが「get_transient()」と「set_transient()」です。

get_transient()

get_transient()はワードプレスがキャッシュしてる情報をゲットするための関数。…そのまんまですね。

get_transient()は引数を一つだけとって、自分で決めた「キャッシュの名前」を渡します。get_transient()を呼ぶだけで、ワードプレス内に今そのキャッシュの名前として一時保存してる情報があるかどうかみてくれて、あればその情報を、なければfalseが返り値として返ってきます。

get_transientの使い方:

$data = get_transient('your_original_cache_name');
if($data === false){
}

set_transient()

さっきのがワードプレス内のキャッシュデータをゲットする関数なら、そう、残す1個「set_transient()」はキャッシュを保存するための関数です。ものすごいシンプル。

set_transient()は引数を3つ取ります。

  1. 第1引数:キャッシュの名前
  2. 第2引数:キャッシュするデータ本体
  3. 第3引数:一時保存する期間(秒数)

第1引数はget_transient()と同じだからわかるし、第2引数は一時保存するデータを渡すだけ。これもあ当たり前ですよね。第3引数はキャッシュを保存する期間を秒数で設定します。例えば12時間で消えるようにするとか、1日で消えるようにするとか細かく期間を設定できるわけですね。

set_transientの使い方:

$data = get_transient('your_original_cache_name');
if($data === false){
~~なんかAPI叩いたりとかの処理~~
~~$dataに一時保存したいデータを入れられたとする~~
set_transient('your_original_cache_name', $data, 12 * HOUR_IN_SECONDS);
}
配列arrayもOK!

一時保存するデータって結構長いことが多いと思うんですよね。また、キャッシュしたいデータが配列なんだけど…、という場合もあるかと思います。

配列でも連想配列でもシリアライズせずに、そのままset_transient()できます

というか勝手にシリアライズしてデータベースに一時保存してくれるんですよね。またget_transient()するときもアンシリアライズを勝手にしてくれます。こっちとしては配列をそのままデータベースに一時保存して、配列のまま読みだしてる、という使用感になります。

HOUR_IN_SECONDSって?

いきなり出てきた「HOUR_IN_SECONDS」ってナニ?という話です。

ワードプレスには時間を簡単に表現できるように定数が宣言してあります。「HOUR_IN_SECONDS」はただ3600(60秒×60分)という定数で、ワードプレス側ですでに宣言されてるんでどんな環境でも使えます。

ほかにも、

  • MINUTE_IN_SECONDS(1分)
  • HOUR_IN_SECONDS(1時間)
  • DAY_IN_SECONDS(1日)
  • MONTH_IN_SECONDS(30日)

なんかがあります。

まとめ

ワードプレスで簡単にキャッシュを実装できる「transient」について紹介しました。

「get_transient()」と「set_transient()」という2つの関数を使うだけで簡単に一時保存ができるんで、ツイッターやインスタなどのAPIをたたいて外部のデータを取得するならぜひ使っておきたいですよね。

ちなみにtransient機能でワードプレスは内部的に何をしてるの?という深い話をちょっとすると、

  1. ワードプレスに元からあるadd_option()関数を使ってデータベースに普通に保存してる
  2. さらに一時保存する期間もさっきのとは別にadd_option()関数を使ってデータベースに保存
  3. get_transient()されるとまず期間をチェックして、越えてたらデータの方も期間の方も削除して、返り値でfalseを返す

っていう普通にデータベースに保存してるだけ。すごいシンプルですね。

【おしらせ、というか完全なる宣伝】

文体がもうぜんぜん適当すぎてあれだけどものすごい自由に書いてるブログ「檸檬だくだく」もよろしく.寝る前に読める恐ろしくくだらないやつです.

こんなにも一ミリも目を引かれないタイトルを取り扱ってます: ココア20g / ハイチュウとかってさ / なぜ米と小麦を食べようと思ったのかの謎 /