cloudwp | WooCommerce 繁體中文使用手冊

如何為 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