はじめに
WordPress を使っていると、「サイトの表示が遅いな」と感じることはありませんか?
多くの人は、WP Super Cache やLiteSpeed Cache などのプラグインを導入して高速化を試みます。
しかし実は、WordPress 自体にもキャッシュ機能が備わっている ことをご存じでしょうか?
たとえば管理画面でテーマを検索すると、最初の検索は少し時間がかかりますが、2回目以降はスムーズに結果が表示されます。
これは WordPress が検索結果をキャッシュとして一時保存しているためです。
今回は、そんな WordPress の内部仕組みをうまく活用して
コードレベルでキャッシュを実装できる便利な機能、Transient API について紹介します。
Transient APIとは?
Transient API とは、WordPress 内で一時的にキャッシュデータを保存するための仕組みです。
処理済みのデータを一定時間データベースに保存し、有効期限が切れると自動的に削除されます。
保存されたデータは wp_options テーブル内に _transient_ という名前で記録され、
同じデータが再び必要になった場合は、PHP の再処理を行わずに データベースから直接取得 します。
これにより、PHP の処理負担を軽減し、ページの表示速度を大幅に向上 させることができます。
Transient APIを使うべきタイミング
Transient API は、頻繁に変化しないデータ を一時的に保存する場合に効果的です。
たとえば、
Instagram、Facebookなどの外部APIから取得するデータ(例:いいね数、画像など)
Transient APIの使い方
ここでは例として、ユーザー一覧をを取得してキャッシュするコードを紹介します。
page-users.php の新規テンプレートとして、次のようなコードを書いてみましょう。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<?php get_header(); $userList = 'user_list'; // MINUTE_IN_SECONDS = 60 (seconds) // HOUR_IN_SECONDS = 60 * MINUTE_IN_SECONDS // DAY_IN_SECONDS = 24 * HOUR_IN_SECONDS // WEEK_IN_SECONDS = 7 * DAY_IN_SECONDS // YEAR_IN_SECONDS = 365 * DAY_IN_SECONDS $saveTime = DAY_IN_SECONDS; // 保存期間(秒) 0で永続(LAST_UPDATE適用時は0以外にする) // delete_transient($userList); // キャッシュ削除(リセット用) $output = get_transient($userList); // キャッシュ取得 if (false === $output) { // キャッシュがなければ取得処理 $query = array( 'role' => 'subscriber', // administrator,editor,author,contributor,subscriber 'order' => 'ASC', 'orderby' => 'id', 'number' => -1, ); $query = new WP_User_Query($query); $userList = $query->get_results(); set_transient($userList, $output, $saveTime); // キャッシュ名,データ,保存時間 } if (!empty($userList)) { echo '<table border="1" cellpadding="5" cellspacing="0">'; echo '<tr><th>ID</th><th>メールアドレス</th><th>表示名</th></tr>'; foreach ($userList as $userData) { $userID = $userData->ID; $userMail = $userData->user_email; $userName = $userData->display_name; echo '<tr>'; echo '<td>' . esc_html($userID) . '</td>'; echo '<td>' . esc_html($userMail) . '</td>'; echo '<td>' . esc_html($userName) . '</td>'; echo '</tr>'; } echo '</table>'; } else { echo '<p>ユーザーが見つかりませんでした。</p>'; } get_footer(); |
このコードを実行すると、
- 初回は時間がかかります。
- 2回目以降はキャッシュデータを使用するため、ページ表示が格段に速くなります。
データの保存場所
キャッシュデータはデータベースの wp_options テーブルに次のようなキーで保存されます。
_transient_user_list → キャッシュの中身
_transient_timeout_user_list → 有効期限

まとめ
Transient API は、WordPress の開発でデータ処理を最適化するための非常に強力なツールです。
複雑なクエリや外部APIの呼び出しが多いサイトでは、導入するだけで大幅なパフォーマンス改善が期待できます。
ぜひこの Transient API を試してみてください。