在使用了WooCommerce的网站中,使用缓存插件能够有效提高页面加载速度,改善用户体验。然而,由于购物车、用户账户等页面涉及到用户的动态数据,这些页面通常不应该缓存,否则可能会导致信息展示错误。本文将详细介绍在使用缓存插件时,如何正确配置WooCommerce缓存设置,确保页面数据的准确性和流畅的购物体验。
一、排除WooCommerce页面缓存
通常情况下,如果用的缓存插件已经兼容WooCommerce,它会默认将以下页面从缓存中排除:
- 购物车页面:展示当前顾客的购物信息,需保持动态更新。
- 我的账户页面:显示用户的账户信息和订单历史,需根据登录用户动态展示。
- 结账页面:涉及结账流程,包含用户的支付和配送信息,需要确保信息的实时性。
确保在缓存插件的设置中,将这些页面手动排除,防止它们被缓存而导致数据不准确。每个缓存插件的设置界面不同,具体请参考插件的文档就好了。
二、排除WooCommerce Session数据缓存
在一些缓存系统中,可能会提供数据库缓存功能。如果插件或服务器缓存允许数据库缓存,建议将_wc_session_
从缓存中排除。这是因为WooCommerce会通过Session数据来管理购物车和用户状态,缓存该数据可能导致购物车信息不同步。
三、排除WooCommerce Cookies缓存
WooCommerce使用Cookies来追踪用户的购物车状态和最近查看的商品。以下是WooCommerce中使用的主要Cookies,建议在缓存设置中排除这些Cookies以确保购物体验的一致性:
Cookie名称 | 有效期 | 作用 |
---|---|---|
woocommerce_cart_hash | session | 用于判断购物车内容是否更新 |
woocommerce_items_in_cart | session | 用于判断购物车内容是否更新 |
wp_woocommerce_session_ | 2天 | 包含唯一代码,用于识别每个用户的购物车数据存储位置 |
woocommerce_recently_viewed | session | 用于管理“最近浏览的商品”小部件 |
store_notice[notice id] | session | 允许用户关闭商店公告 |
四、常见缓存插件的WooCommerce兼容性设置
1. W3 Total Cache
在W3 Total Cache的设置中,要确保在“最小化设置”下的“忽略的注释前缀”选项中添加“mfunc”,避免在最小化过程中影响WooCommerce的动态内容。
2. WP-Rocket
WooCommerce完全兼容WP-Rocket,在设置中确保“购物车”、“结账”和“我的账户”页面不被缓存。此外,建议避免最小化JavaScript文件,以防止造成页面加载问题。
3. WP Super Cache
WooCommerce与WP Super Cache具有天然兼容性。WooCommerce会自动向WP Super Cache发送信息,默认不缓存“购物车”、“结账”和“我的账户”页面。
4. Varnish
如果使用Varnish缓存,建议添加以下代码排除动态页面的缓存:
if (req.url ~ "^/(cart|my-account|checkout|addons)") {
return (pass);
}
if (req.url ~ "\\?add-to-cart=" ) {
return (pass);
}
对于WooCommerce的API和动态页面的访问请求,也可以添加如下设置:
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 API
if (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;
}
五、常见问题与故障排查
1. Varnish配置在WooCommerce中不起作用
- 如果Varnish缓存未正确生效,再检查并确定已将需要排除的页面和WooCommerce的Session、Cookies相关配置完成。还可以在WordPress.org的支持论坛中查阅与Cookies相关的代码设置。
2. 密码重置页面循环
- 当“我的账户”页面被缓存时,可能会导致密码重置操作卡在登录界面。此时请联你的服务器供应商,确认该页面未被服务器端缓存。
通过以上配置,可以有效提升WooCommerce网站的性能,同时确保购物车、结账等动态页面不会被缓存导致数据展示错误。如有具体问题,建议根据缓存插件文档或与相关技术支持团队联系。
暂无评论内容