WordPress | Transients API を利用して重い処理を高速化させる方法

Transients(トランジェンツ) API を利用して複雑な集計処理など重い処理の結果をキャッシュとしてデーターベースに保存することでページ表示速度を高速化することが期待できます。

キャッシュの取得

キャッシュを取得する場合は get_transient() にキャッシュ名を渡してキャッシュ(Transient [トランジェント])を取得します。

// キャッシュの取得や保存に使うキャッシュ名
$cache_name = 'news';

// キャッシュの取得
$news_query  = get_transient($cache_name);

キャッシュの保存

カスタム投稿タイプ「news」の取得した投稿データ全件をキャッシュとしてデータベースに保存します。

キャッシュを保存する場合は set_transient() に “キャッシュ名”、”クエリなど保存したいデータ”、”保存期間(※秒で指定)” の3つを渡して保存します。

キャッシュデータは wp_optionsテーブルに option_name が “_transient_news” という名前で保存されます。同時に有効期限情報の “_transient_timeout_news” も保存されます。※キャッシュ名が「news」の場合

// キャッシュがなければデータ取得と保存
if ( $news_query === false ) {
    $params = [
        'post_type'      => 'news',
        'posts_per_page' => -1,
        'orderby'        => 'date',
        'order'          => 'DESC',
    ];
    $news_query = WP_Query( $params );

    // クエリをキャッシュに保存(※1週間保存)
    set_transient( $cache_name, $news_query, 60 * 60 * 24 * 7 );
}

キャッシュの削除

キャッシュを削除する場合は delete_transient() にキャッシュ名を渡して削除します。

/**
 * お知らせの追加・更新時にキャッシュを削除
 *
 */
function delete_transient_cache_news( $cache_name )
{
    delete_transient($cache_name);
}
add_action( 'publish_news', 'delete_transient_cache_news');
add_action( 'deleted_news', 'delete_transient_cache_news');
add_action( 'save_news', 'delete_transient_cache_news');
add_action( 'edit_news', 'delete_transient_cache_news');

動作環境情報

"エックスサーバー" スタンダード(旧X10)
"PHP" 7.4.28
"MariaDB" 10.5
"WordPress" 6.0

コメント

タイトルとURLをコピーしました