---
canonical: https://cyberforums.com/t/wp-rocket-woocommerce/2461
webpage: https://admincdn.com/forums/t/2461-wp-rocket-woocommerce/
language: zh-Hans
---

# WP Rocket + WooCommerce 首页缓存失效的四层排查过程

> 萌芽加速支持论坛的只读副本，本页不能回复。
> 讨论原文：https://cyberforums.com/t/wp-rocket-woocommerce/2461
> 网页版：https://admincdn.com/forums/t/2461-wp-rocket-woocommerce/

## 1 · weixiaoduo

- 发布时间：2026年2月22日 05:00

问题
WooCommerce 商城首页 TTFB 从正常的 0.2s 飙升到 2.3s，WP Rocket 页面缓存完全失效。nginx 层面没有缓存文件生成，每次请求都打到 PHP。
环境

WordPress 6.9.1 多站点（子目录模式）
WooCommerce 10.3.7
WP Rocket 3.x + Object Cache Pro（Redis）
PHP 8.3，nginx

排查过程：四层问题逐一剥离
第一层：Redis 崩溃
Redis maxmemory 设置为 6GB 但实际使用超限，导致 Object Cache Pro 频繁回落到数据库查询。
解决：调整 maxmemory 到 8GB，Object Cache Pro 设置 maxttl=86400 防止缓存无限增长。
第二层：mu-plugin 注入 no-cache 头
发现一个用于屏蔽统计脚本的 mu-plugin，在 wp_head 钩子中注入了 Cache-Control: no-cache 响应头。WP Rocket 检测到该头后跳过缓存写入。
解决：删除该 mu-plugin（功能已被其他方式替代）。
第三层：多币种插件的 mandatory cookie
WP Rocket 配置中存在 YITH 多币种插件设置的 mandatory cookie。逻辑是：只有携带该 cookie 的请求才会被缓存。但首次访客没有这个 cookie，所以永远不会生成缓存文件——形成死循环。
解决：清空 WP Rocket mandatory_cookies 配置。币种选择改为前端 JS 处理，不依赖服务端 cookie 分流。
第四层：WC API Manager 禁用首页缓存
前三层修复后，内页缓存恢复正常，但首页仍然不缓存。
追踪发现 WooCommerce API Manager 插件在 wc-am-smart-cache.php 中有一段逻辑：当 WC_AM_DISABLE_HOMEPAGE_CACHE 常量为 true（默认值）且当前页面是首页时，设置 DONOTCACHEPAGE 常量为 true。WP Rocket 在 can_process_buffer() 中检测到该常量后放弃缓存。
解决：在 wp-config.php 中添加：
define('WC_AM_DISABLE_HOMEPAGE_CACHE', false);

结果
TTFB 从 2.3s 降到 0.18s（直接命中缓存）。含 WooCommerce geolocation_ajax 307 跳转的完整流程约 0.9s。
经验总结

WP Rocket 缓存失效要逐层排查：响应头 → mu-plugin/插件干预 → WP Rocket 自身配置 → 第三方插件的 DONOTCACHEPAGE 设置
mandatory_cookies 是个陷阱：设计初衷是按 cookie 分流缓存，但如果首次访客没有该 cookie，就永远不会生成第一份缓存
WC API Manager 默认禁用首页缓存：这个行为没有在插件设置界面暴露，只能通过 wp-config.php 常量覆盖
诊断页面缓存必须通过 HTTP 请求：WP-CLI 不加载 advanced-cache.php，无法复现缓存相关问题
