为 WooCommerce 配置缓存插件

将动态页面排除在缓存之外

很多缓存插件已经默认排除以下页面。否则,请在相应缓存系统的设置中,将这些页面排除:

  • 购物车
  • 我的账户
  • 结账

这些页面显示当前客户及其购物车的专属信息,因此必须保持动态。

将 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。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容