最後核對:2026 年 10 月。
大多數靜態導出工具都放棄了 WooCommerce,理由也很合理:商店隨時在變。價格會打折、庫存會賣完,每位訪客還有自己的購物車。但是把顧客帶進來的頁面——商品頁、分類頁和你的內容——對每個人都一樣。這些可以靜態化;屬於個人或交易的部分則留在 WordPress。
為什麼商店很難靜態化
- 價格和庫存會變,導出後被凍結的頁面可能顯示錯誤價格,或賣出已經缺貨的商品。
- 購物車屬於單一訪客。WooCommerce 用 cookie 辨識的 session 來保存它。
- 結帳要收款並和金流服務溝通,這些都必須連到 WordPress。
- 我的帳戶顯示登入顧客自己的訂單。
哪些可以靜態、哪些必須動態
| 頁面或動作 | 能靜態嗎? | 做法 |
|---|---|---|
| 商品頁 | 可以 | 用靜態 HTML 求速度與 SEO,再即時載入價格與庫存 |
| 商店與分類頁 | 可以 | 同商品頁 |
| 部落格、指南、著陸頁 | 可以 | 一般靜態頁 |
| 加入購物車 | 不行 | 必須送到 WordPress,商品才會進到訪客的購物車 |
| 購物車、結帳、我的帳戶 | 不行 | 一律由 WordPress 提供 |
| 金流服務的回呼 | 不行 | 必須直接連到 WordPress |
用靜態頁經營商店的三種做法
- 商店保持動態。只導出內容,不導出商品。最簡單——在 Pinery Static 裡不勾選
product類型即可——但商品頁享受不到速度上的好處。 - 靜態商品頁+即時資料。導出商品和商店頁,在瀏覽器裡從 WooCommerce 更新價格與庫存,購物車和結帳留在 WordPress。Pinery Static Pro 就是這樣做的。
- 改成 headless。用 JavaScript 框架在 WooCommerce API 之上重做整個前台。最有彈性,也最費工。
Pinery Static Pro 如何讓商店照常運作
- 商品頁和商店頁導出成靜態 HTML,價格和庫存是導出當下的狀態。
- 訪客打開頁面時,一段小腳本會向 WooCommerce Store API(
/wp-json/wc/store/v1,公開、不需驗證的 API)查詢目前的價格與庫存,替換掉導出時的數值。缺貨商品的按鈕會被停用。 - 加入購物車的表單和
?add-to-cart連結直接指向 WordPress,商品會進到/cart/和/checkout/顯示的那個正常 WooCommerce 購物車。 - 購物車、結帳和帳戶頁預設不導出,由 WordPress 提供。
- 在你的網域上使用內建的 Worker 路由時,
?add-to-cart、wc-ajax請求和所有表單送出都會轉給 WordPress;靜態站裡沒有的頁面——包括上次部署後新增的商品——也會交給 WordPress,而不是回傳 404。
為什麼商店最好用同一個網域
WooCommerce 的購物車存在由你 WordPress 網域設定的 cookie 裡。如果靜態頁在 example.com、WordPress 在 wp.example.com,顧客走到購物車時就會換網址,兩邊之間的連結也必須處處正確。讓兩者共用同一個網域的路由可以避免這個問題:靜態頁、購物車和結帳都在同一個網址、同一個 cookie 下。
測試清單
- 在 WordPress 修改價格,確認靜態商品頁不用重新導出就顯示新價格。
- 把商品設為缺貨,確認按鈕被停用。
- 從靜態頁加入購物車,再打開購物車並結帳。
- 在購物車套用優惠券。
- 做一筆測試付款,確認訂單狀態有更新,證明金流服務連得到 WordPress。
- 確認購物車、結帳和帳戶頁不會被 CDN 快取。
常見問題
WooCommerce 商店能完全靜態化嗎?
不能。購物車、結帳和帳戶頁因人而異,必須由 WordPress 提供。商品、分類和內容頁可以靜態化。
顧客會看到過時的價格嗎?
有即時更新就不會:頁面載入時,導出的價格會被替換成目前的價格。購物車和結帳一律在 WordPress 計算價格,所以實際收費永遠是最新的。
Simply Static 支援 WooCommerce 嗎?
它自己的 FAQ 表示商店、結帳和會員登入區不適合靜態網站。Pinery Static Pro 則是專門設計來讓它們和靜態商品頁一起運作。
靜態化的商店對 SEO 有幫助嗎?
商品頁和分類頁載入更快,主題或 SEO 插件輸出的商品結構化資料也會保留在導出的 HTML 裡。