将动态页面排除在缓存之外
很多缓存插件已经默认排除以下页面。否则,请在相应缓存系统的设置中,将这些页面排除:
- 购物车
- 我的账户
- 结账
这些页面显示当前客户及其购物车的专属信息,因此必须保持动态。
将 WooCommerce 会话排除在缓存之外
如果所用缓存系统提供数据库缓存,将 _wc_session_ 排除在缓存之外可能有帮助。具体操作取决于插件或主机缓存系统,请参考相应说明或文档。
将 WooCommerce Cookie 排除在缓存之外
WooCommerce 的 Cookie 用于跟踪客户购物车中的商品,在客户离开网站后仍将购物车保存在数据库中,并支持“最近浏览”小工具。下面列出了 WooCommerce 为这些功能使用的 Cookie,可以将它们排除在缓存之外。
| Cookie 名称 | 有效期 | 用途 |
|---|---|---|
| woocommerce_cart_hash | 会话期间 | 帮助 WooCommerce 判断购物车内容或数据是否发生变化。 |
| woocommerce_items_in_cart | 会话期间 | 帮助 WooCommerce 判断购物车内容或数据是否发生变化。 |
| wp_woocommerce_session_ | 2 天 | 包含每个客户的唯一标识码,以便在数据库中找到对应的购物车数据。 |
| woocommerce_recently_viewed | 会话期间 | 用于“最近浏览的商品”小工具。 |
| store_notice[notice id] | 会话期间 | 允许客户关闭商店通知。 |
本文无法涵盖全部缓存方案,但下面列出了一些常见缓存插件的配置提示。如需更具体的支持,请联系负责相应缓存集成的支持团队。
W3 Total Cache 压缩设置
请在 Minify 设置的“Ignored comment stems”(忽略的注释前缀)选项中添加 mfunc。
WP-Rocket
WooCommerce 与 WP-Rocket 完全兼容。请在插件设置中确认购物车、结账和我的账户页面不会被缓存。
建议避免对 JavaScript 文件进行压缩。
WP Super Cache
WooCommerce 原生兼容 WP Super Cache,并会向它发送信息,使其默认不缓存购物车、结账或我的账户页面。
Varnish
if (req.url ~ "^/(cart|my-account|checkout|addons)") { return (pass);}if ( req.url ~ "\\?add-to-cart=" ) { return (pass);}
故障排查
为什么 Varnish 配置在 WooCommerce 中不起作用?
请参考原文所链接的 WordPress.org 支持论坛讨论,了解 Cookie 可能如何影响 Varnish 配置。
Add this to vcl_recv above "if (req.http.cookie) {":# Unset Cookies except for WordPress admin and WooCommerce pages if (!(req.url ~ "(wp-login|wp-admin|cart|my-account/*|wc-api*|checkout|addons|logout|lost-password|product/*)")) { unset req.http.cookie; } # Pass through the WooCommerce dynamic pages if (req.url ~ "^/(cart|my-account/*|checkout|wc-api/*|addons|logout|lost-password|product/*)") { return (pass); } # Pass through the WooCommerce add to cart if (req.url ~ "\?add-to-cart=" ) { return (pass); } # Pass through the WooCommerce APIif (req.url ~ "\?wc-api=" ) { return (pass); } # Block access to php admin pages via website if (req.url ~ "^/phpmyadmin/.*$" || req.url ~ "^/phppgadmin/.*$" || req.url ~ "^/server-status.*$") { error 403 "For security reasons, this URL is only accessible using localhost (127.0.0.1) as the hostname"; } Add this to vcl_fetch:# Unset Cookies except for WordPress admin and WooCommerce pages if ( (!(req.url ~ "(wp-(login|admin)|login|cart|my-account/*|wc-api*|checkout|addons|logout|lost-password|product/*)")) || (req.request == "GET") ) { unset beresp.http.set-cookie; }
为什么重置密码时陷入循环?
这通常是由于“我的账户”页面被缓存。一些使用服务器端缓存的主机不会自动将 my-account.php 排除。
如果无法重置密码,并且总是返回登录页面,请联系主机提供商,确认该页面已被排除在缓存之外。
原文:How to configure caching plugins for WooCommerce。作者/来源:WooCommerce 文档团队。本文依据所列原文整理为中文,代码、命令与配置示例保留原文。
原文许可/版权说明:GPLv3。











暂无评论内容