WordPress保存しておきたいデータがあるけど、テーブル構造を作るほどでもないときのTransient

例えば、データベースに1000人の学生の成績が格納されていて、表サイトにいつも平均点を表示しておきたかったりするとき、

毎回表示の際に生徒全員分の成績を取り出して来て合算し平均の算出する処理をしているとサイトが重くなってしまします。

そんな時はWordpressのTransients APIという機能を使って平均を保存しておきましょう。

Transients APIの使い方

値を保存する、set_transient()

set_transient()の引数には、保存したい「データの名前、保存したいデータの本体、データの有効期限」を渡してやります。 今回の例だとこんな感じ。成績は3ヶ月毎の定期試験で更新されるので有効期限は3ヶ月(12週)にしておきます

set_transient("score_mean", $students_score_mean, 12 * WEEK_IN_SECONDS);

これで値がセットできます

保存した値を取り出す、get_transient()

get_transient()の引数には、保存したい「データの名前」を渡してやるだけです。 今回の場合は

get_transient("score");

これだけです。

get_transientは値がなかった時はfalseを返します。値が帰ってこなかった時に条件分岐をさせたい時は、

if(false===(value = get_transient("score_mean"))){
}

としましょう。

これらを活用すると今まで単純に平均をいちいち算出してたところを

$students_score_mean = get_average($scores) //平均を計算する処理

transientを挟んで

$students_score_mean = get_transient("score_mean")
if(false=== $students_score_mean){
     $students_score_mean = get_average($scores)
     set_transient("score_mean", $students_score_mean, 12 * WEEK_IN_SECONDS);
}

こうしてやるだけでいちいち計算しなくなるので高速化されるはずです