WordPressのオブジェクトキャッシュを削除する方法|表示が遅い時の対処まとめ

WordPressサイトで、ソートやフィルターなど動的な変更を反映させたいとき、キャッシュが邪魔をすることがあります。今回は、プラグインなしで PHP コードだけでオブジェクトキャッシュを削除したり、ブラウザキャッシュを回避する方法を解説します。

1 WordPress オブジェクトキャッシュを削除する方法

WordPress のオブジェクトキャッシュ(Object Cache)は、PHP 内の処理速度を上げるためにデータベース参照結果などを一時的に保存する仕組みです。管理バーに「オブジェクトキャッシュ削除」ボタンを設置して、視覚的にも簡単に削除できます。

1.1 オブジェクトキャッシュとは?

WordPress では、同じ記事情報や設定値を複数回取得する場合に、毎回データベースを参照せずメモリにキャッシュされた情報を利用します。
この仕組みが Object Cache です。

WordPress 本体には 一時的なオブジェクトキャッシュ が標準で備わっており、ページ生成中に有効です。
プラグインやサーバー設定によっては、オブジェクトキャッシュを 永続化(ページを跨いでも保持) することもあります(例:Redis, Memcached)。

2 functions.php にコードを追加(オブジェクトキャッシュ用)


//-------------------------------------------
// WordPress オブジェクトキャッシュをクリア
//-------------------------------------------
add_action('init', function() {
    if (isset($_GET['clear_cache'])) {
        wp_cache_flush(); // すべてのオブジェクトキャッシュを削除
    }
});

add_action('init', function() {
    if (isset($_GET['clear_cache']) && current_user_can('manage_options')) {
        wp_cache_flush(); // オブジェクトキャッシュ削除
        wp_safe_redirect(add_query_arg('clear_cache_done', 1, admin_url()));
        exit;
    }
});

add_action('admin_bar_menu', function($wp_admin_bar) {
    if (!current_user_can('manage_options')) return;

    $title = isset($_GET['clear_cache_done']) ? '✅ オブジェクトキャッシュ削除済み' : '🗑️ オブジェクトキャッシュ削除';

    $args = [
        'id'    => 'clear-cache',
        'title' => $title,
        'href'  => add_query_arg('clear_cache', 1, admin_url()),
        'meta'  => [
            'class' => 'clear-cache-button',
            'title' => 'オブジェクトキャッシュを削除します'
        ]
    ];
    $wp_admin_bar->add_node($args);
}, 100);

管理バーの「オブジェクトキャッシュ削除」ボタンを押すと、オブジェクトキャッシュが削除されます。ページキャッシュ(HTMLファイル)は削除されません。

3 ブラウザキャッシュを回避する方法

特定の URL パラメータが付いたページだけブラウザや CDN のキャッシュを回避する方法です。例えば:

https://example.com/category/news/?sort=new

「?sort=new」が付いている場合のみキャッシュを回避するコード例:

※CDNは Content Delivery Network(コンテンツ・デリバリー・ネットワーク) の略です。簡単に言うと、「ウェブサイトのデータを世界中に分散して高速配信する仕組み」です。


//-------------------------------------------
// URLパラメータを使ってブラウザキャッシュを回避
//-------------------------------------------
add_action('template_redirect', function() {
    if (isset($_GET['sort'])) {
        header('Cache-Control: no-cache, no-store, must-revalidate', true);
        header('Pragma: no-cache', true);
        header('Expires: 0', true);
    }
});

3.1 併用のポイント

  • ブラウザキャッシュ回避:フロントエンド表示用
  • オブジェクトキャッシュクリア:データベース参照や内部処理用
  • 処理のタイミングが異なるため、ほとんど競合はありません
  • サーバーキャッシュ(Varnish, LiteSpeed, Nginx FastCGI Cache など)がある場合は別途対応が必要

4 注意点

  • wp_cache_flush() は全オブジェクトキャッシュを削除するので、アクセスが多いサイトでは慎重に使用してください
  • ブラウザキャッシュ回避だけでは、サーバー側のキャッシュは影響を受けません

5 代用プラグイン

  • Redis Object Cache(永続化オブジェクトキャッシュ用)
  • W3 Total Cache(ページキャッシュ・オブジェクトキャッシュ統合)
  • WP Rocket(ページ高速化・キャッシュ管理)
  • LiteSpeed Cache(LiteSpeedサーバー向け最適化)

6 まとめ

プラグインなしでも、オブジェクトキャッシュの削除やブラウザキャッシュ回避を行うことができます。
特に動的コンテンツ(ソートやフィルター)には URL パラメータを活用してキャッシ