如何為 WooCommerce 設定快取外掛
從快取中排除頁面
使用快取外掛時,它們通常會自動排除這些頁面。否則請確保透過快取系統的相關設定,從快取中排除以下頁面。
- 購物車
- 我的帳號
- 結帳頁
這些頁面需要保持動態,因為它們會顯示目前顧客及其購物車的特定資訊。
從快取中排除 WooCommerce 工作階段
如果您使用的快取系統提供資料庫快取,排除 _wc_session_ 可能會有幫助。這取決於外掛或主機快取,請參考該系統的特定說明或文件。
從快取中排除 WooCommerce Cookie
使用 WooCommerce 的 Cookie 可協助追蹤顧客購物車中的商品,如果顧客離開網站可保留購物車內容至資料庫,並支援最近瀏覽的小工具。以下是 WooCommerce 使用的 Cookie 清單,您可以從快取中排除這些 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 壓縮設定
請確保在「壓縮」設定的「忽略的註解開頭」選項中新增 'mfunc'。
WP-Rocket
WooCommerce 完全相容 WP-Rocket。請確保以下頁面(購物車、結帳頁、我的帳號)在外掛設定中不被快取。
建議避免 JavaScript 檔案壓縮。
WP Super Cache
WooCommerce 原生相容 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 程式碼。
在 vcl_recv 中的 "if (req.http.cookie) {" 上方新增此內容:
# 取消設定 Cookie,除了 WordPress 管理頁面和 WooCommerce 頁面
if (!(req.url ~ "(wp-login|wp-admin|cart|my-account/*|wc-api*|checkout|addons|logout|lost-password|product/*)")) {
unset req.http.cookie;
}
# 放行 WooCommerce 動態頁面
if (req.url ~ "^/(cart|my-account/*|checkout|wc-api/*|addons|logout|lost-password|product/*)") {
return (pass);
}
# 放行 WooCommerce 加入購物車
if (req.url ~ "\?add-to-cart=" ) {
return (pass);
}
# 放行 WooCommerce API
if (req.url ~ "\?wc-api=" ) {
return (pass);
}
# 透過網站封鎖 php 管理頁面的存取
if (req.url ~ "^/phpmyadmin/.*$" || req.url ~ "^/phppgadmin/.*$" || req.url ~ "^/server-status.*$") {
error 403 "基於安全考量,此 URL 僅能使用 localhost (127.0.0.1) 作為主機名稱存取";
}
在 vcl_fetch 中新增此內容:
# 取消設定 Cookie,除了 WordPress 管理頁面和 WooCommerce 頁面
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 被快取。
如果您無法重設密碼並持續返回登入畫面,請聯繫您的主機商,確保此頁面被排除在快取之外。
最後更新於 Dec 9, 2025