2026年7月20日

2026年7月20日

WP Fastest Cacheのエラーを解決する方法

はじめに

WP Fastest Cacheを有効にしたが記事を更新してもキャッシュが自動削除されず古いページが表示される・CSS/JavaScriptの最小化を有効にするとスライダーが動作しなくなりレイアウトが崩れる・モバイル向けに別キャッシュを設定したがスマートフォンでも同じキャッシュが表示される・WooCommerceのカートページがキャッシュされて商品数が0のままになるといった問題は、キャッシュ除外設定・モバイル検出・WooCommerce連携設定が原因です。

症状・原因

  • 記事を更新してもブラウザで古い内容が表示される(スーパーキャッシュが残っている)
  • CSS最小化を有効にすると管理バーが崩れるかJavaScriptエラーが発生する
  • スマートフォンでサイトにアクセスするとデスクトップ版のキャッシュが返される
  • WooCommerceのカートが常に空の状態で表示される

解決手順

ステップ1:WP Fastest Cacheの状態を確認する

# WP Fastest Cache設定確認
wp eval "
if (class_exists('WpFastestCache')) {
    echo 'WP Fastest Cache active' . PHP_EOL;
}

// 設定を確認
\$options = json_decode(get_option('WpFastestCache', '{}'), true);
echo 'Status: '         . (\$options['status'] ?? 'unknown') . PHP_EOL;
echo 'Minify CSS: '     . (!empty(\$options['wpfc_minify_css']) ? 'yes' : 'no') . PHP_EOL;
echo 'Minify JS: '      . (!empty(\$options['wpfc_minify_js']) ? 'yes' : 'no') . PHP_EOL;
echo 'Mobile cache: '   . (!empty(\$options['wpfc_mobile_cache']) ? 'yes' : 'no') . PHP_EOL;
echo 'Logged in: '      . (!empty(\$options['wpfc_logged_in']) ? 'excluded' : 'cached') . PHP_EOL;

// キャッシュファイルを確認
\$cache_dir = ABSPATH . 'wp-content/cache/all/';
\$count = 0;
if (is_dir(\$cache_dir)) {
    \$count = count(glob(\$cache_dir . '*/*'));
}
echo 'Cached pages: ' . \$count . PHP_EOL;

// 除外URLを確認
\$exclude = \$options['wpfc_exclude'] ?? [];
echo 'Excluded URLs: ' . count(\$exclude) . PHP_EOL;
foreach (\$exclude as \$e) {
    echo '  - ' . \$e['prefix'] . \$e['content'] . PHP_EOL;
}
"

ステップ2:キャッシュの自動パージを設定する

// functions.php: WP Fastest Cache自動パージ

// ① 投稿更新時にキャッシュを削除
add_action('save_post', function(int $post_id, WP_Post $post): void {
    if ($post->post_status !== 'publish') return;
    if (wp_is_post_revision($post_id)) return;

    // WP Fastest Cacheのキャッシュ削除
    if (function_exists('wpfc_clear_post_cache_by_id')) {
        wpfc_clear_post_cache_by_id($post_id);
    } elseif (class_exists('WpFastestCache')) {
        $wpfc = new WpFastestCache();
        $wpfc->deleteCache(true);
    }

    error_log(sprintf('[WPFC] Cache cleared for post #%d', $post_id));
}, 10, 2);

// ② WP-CLIからキャッシュクリアするコマンド
if (defined('WP_CLI') && WP_CLI) {
    WP_CLI::add_command('wpfc clear', function(): void {
        if (function_exists('wpfc_clear_all_cache')) {
            wpfc_clear_all_cache();
            WP_CLI::success('WP Fastest Cache cleared.');
        } else {
            WP_CLI::error('wpfc_clear_all_cache not found.');
        }
    });
}

// ③ メニュー更新時に全キャッシュをクリア
add_action('wp_update_nav_menu', function(): void {
    if (function_exists('wpfc_clear_all_cache')) {
        wpfc_clear_all_cache();
        error_log('[WPFC] All cache cleared due to menu update');
    }
});

ステップ3:CSS/JS最小化の除外設定を修正する

// functions.php: 最小化除外設定

// ① 特定スクリプトをWPFCの最小化から除外するフィルター
add_filter('wpfc_minify_javascript_options', function(array $options): array {
    // 除外するスクリプトのキーワード
    $options['excluded'] = array_merge(
        $options['excluded'] ?? [],
        [
            'jquery',
            'slick',
            'elementor',
            'woocommerce',
            'recaptcha',
            'googlesyndication',
        ]
    );
    return $options;
});

// ② 最小化を特定のページで無効にする
add_filter('wpfc_skip_minify', function(bool $skip): bool {
    // チェックアウトページでは最小化をスキップ
    if (function_exists('is_checkout') && is_checkout()) {
        return true;
    }
    // AJAXリクエストではスキップ
    if (defined('DOING_AJAX') && DOING_AJAX) {
        return true;
    }
    return $skip;
});

// ③ インライン<style>タグを保護
add_filter('wpfc_minify_css_inline', function(string $css): string {
    // Googleフォントのインラインスタイルは最小化しない
    if (str_contains($css, 'fonts.googleapis.com')) {
        return $css;
    }
    return $css;
});

ステップ4:モバイルキャッシュの問題を修正する

# モバイルキャッシュの診断
wp eval "
// User-Agentによるモバイル判定を確認
\$user_agent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X)';
\$is_mobile = preg_match('/Mobile|Android|iPhone|iPad/i', \$user_agent);
echo 'Test UA is mobile: ' . (\$is_mobile ? 'yes' : 'no') . PHP_EOL;

// モバイルキャッシュの設定
\$options = json_decode(get_option('WpFastestCache', '{}'), true);
echo 'Mobile cache enabled: ' . (!empty(\$options['wpfc_mobile_cache']) ? 'yes' : 'no') . PHP_EOL;
echo 'Mobile theme: ' . (\$options['wpfc_mobile_theme'] ?? 'not set') . PHP_EOL;

// モバイル向けキャッシュディレクトリを確認
\$mobile_cache = ABSPATH . 'wp-content/cache/all-mobile/';
echo 'Mobile cache dir exists: ' . (is_dir(\$mobile_cache) ? 'yes' : 'no') . PHP_EOL;
"

ステップ5:WooCommerceとの連携を修正する

// functions.php: WooCommerce連携設定

// ① WooCommerce動的ページをキャッシュから除外
add_filter('wpfc_exclude_from_cache', function(bool $exclude): bool {
    if (!function_exists('WC')) return $exclude;

    // カート・決済・マイアカウントページは除外
    if (is_cart() || is_checkout() || is_account_page()) {
        return true;
    }

    // カートCookieがある場合はキャッシュしない
    if (!empty($_COOKIE['woocommerce_items_in_cart'])) {
        return true;
    }
    if (!empty($_COOKIE['woocommerce_cart_hash'])) {
        return true;
    }

    return $exclude;
});

// ② WooCommerce注文完了後にキャッシュをクリア
add_action('woocommerce_order_status_completed', function(int $order_id): void {
    if (function_exists('wpfc_clear_all_cache')) {
        wpfc_clear_all_cache();
        error_log(sprintf('[WPFC] Cache cleared after order #%d completed', $order_id));
    }
});

// ③ 商品在庫変更時に商品ページのキャッシュをクリア
add_action('woocommerce_product_set_stock', function(WC_Product $product): void {
    if (function_exists('wpfc_clear_post_cache_by_id')) {
        wpfc_clear_post_cache_by_id($product->get_id());
    }
});

注意事項

  • WP Fastest CacheのCSS/JS最小化機能は有効にした直後に必ずすべてのページで表示確認を行ってください。特にスライダー・カスタムJavaScript・外部スクリプトが正常に動作しない場合は「JavaScript最小化」を無効にして個別に問題のあるスクリプトを特定してください
  • WooCommerceを使用している場合はプラグイン設定の「WooCommerceページを除外する」オプションを必ず有効にしてください。手動でカートページのURLを除外リストに追加する方法もありますが、Cookie検出による除外の方がより確実です
  • モバイル向け別キャッシュを有効にした場合、Cloudflareなどのリバースプロキシを経由するとUser-Agentヘッダーが書き換えられてモバイル判定が正しく機能しないことがあります。Cloudflareの「Browser Cache TTL」設定も合わせて確認してください

まとめ

WP Fastest Cache修復は①WpFastestCacheオプションでMinify・モバイルキャッシュ設定確認・除外URL一覧取得、②save_postフックでwpfc_clear_post_cache_by_id()によるページ単位の自動パージ・メニュー更新時も全キャッシュクリア、③wpfc_minify_javascript_optionsフィルターでjQuery・スライダー・WooCommerceを除外・wpfc_skip_minifyでチェックアウトページを除外、④モバイルキャッシュディレクトリの存在確認・UA判定のデバッグ、⑤wpfc_exclude_from_cacheフィルターでカートCookieベースの除外・woocommerce_order_status_completedフックで注文完了後にキャッシュクリアする手順で解決します。

お気軽にご相談ください

お見積りへ お問い合わせへ