WooCommerce 改結帳欄位或配送選項:地址、稅與訂單記錄要驗甚麼
把公司名稱設必填、電話隱藏或新增配送選項,但結帳欄位是交易資料入口:同一地址可能決定配送區、運費、稅率及客服讀取的訂單資料。
本文用欄位規格驗:誰填、何時顯示、怎樣驗證、送到哪裡、舊訂單會否受影響。搬遷或更新後回歸,可先看多語系與多貨幣檢查及更新後功能回歸清單。
Checkout Block 與 shortcode checkout 的欄位支援不是同一套。 先確認結帳頁類型,再選區塊設定、額外欄位 API 或 shortcode filters。用錯方法,畫面可能「看起來有改」,資料卻沒按預期保存。
一、先認清 Checkout Block 與 shortcode 的分工
Checkout Block 的欄位是內層區塊;公司、地址二、電話等可在區塊設定切換顯示,並選選填或必填。官方說行為受當前訂單與 WooCommerce 設定影響 [1]。不要只看編輯器預覽,要用不同國家與購物車狀態實測。
Shortcode checkout 的舊式 filters 仍然存在,但官方文件提醒:部分內容只適用於 shortcode checkout;要為 Checkout Block 加欄位,應參考額外欄位文件 [2]。Shortcode 常用 woocommerce_checkout_fields 改欄位,並以 woocommerce_checkout_process 做伺服器端驗證;定義在 checkout fields 陣列的欄位會自動處理並保存到訂單 meta [2]。
Checkout Block 則用 woocommerce_register_additional_checkout_field() 註冊額外欄位,可放在 contact、address 或 order 位置;address 欄位會同時出現在帳單與送貨地址,資料保存到客戶及訂單,並可設定清理與驗證 callback [3]。兩者的欄位 ID、必填規則、保存位置和驗證時機都可能不同。
二、把每個欄位寫成核對表
改動前,先為每個欄位填一張表。最低限度要記錄:
| 項目 | 要回答的問題 |
|---|---|
| 欄位 ID | 是 core 欄位、block 額外欄位,還是 shortcode 自訂 key? |
| 顯示 | 按哪個位置(contact/address/order)出現?訪客、已登入、虛擬產品、本地取貨時是否應顯示? |
| 必填/隱藏 | 預設值、選填、必填、按國家隱藏,會否互相衝突? |
| 驗證 | 空白、格式錯、超長、非預期字符時,哪一層負責攔截? |
| 落單後 | contact 到客戶與訂單?address 到客戶與訂單?order 只到訂單? |
| 讀取 | 已約定的後台、電郵、發票、export/API、外掛是否真的讀這個 key? |
要分清前端 required 與伺服器端驗證:前端報錯不代表繞過仍會被拒;前端看似成功,也可能在伺服器端被丟棄。每個新增或改名欄位,都要用測試訂單確認它在已約定位置和目的地出現;不要假設所有下游自動支援,也不要把未約定顯示的地方當成失敗。
三、地址欄位會同時影響配送區與稅
配送區按送貨地址匹配,由列表上到下選中第一個符合區;每個客戶只匹配一個區 [4]。所以區要由最具體排到最廣泛:先郵遞區號/城市,再州省,最後國家。若廣泛國家區放在前面,後面窄區可能永遠選不中。
如果新增、隱藏或改寫郵遞區號、州省或國家欄位,客戶可能由原本的窄區掉到其他區,運費選項也跟著改變。測試要用邊界地址:
- 同國指定郵遞區號 vs 其他郵遞區號;
- 有州省選項 vs 沒有州省選項的國家;
- 地址二或公司空白、帳單與送貨地址不同;
- 純虛擬購物車(通常毋須配送);另外測試實體商品未匹配自訂區而落到 Rest of the world。
稅務也不是只看「有沒有加稅」。官方文件說,計算稅項可基於客戶送貨地址、帳單地址或商店基準地址,預設是送貨地址 [5]。同一運費選項在地址改變後可能出現不同稅額。本文不是稅務建議;要核對商店設定、地址、稅率與顯示是否一致。
四、運費與稅要分開記錄
配送區決定可用方法;區內第一個啟用的方法為預設選項 [4]。該區沒有任何已啟用方法時,官方文件說客戶會被告知無法配送,對需要配送的實體商品,這是無法使用該配送路徑,並非 $0 運費;可用的 Free Shipping、設為 $0 的 Flat Rate 或 Local Pickup 才屬零運費選項。本地取貨亦可收費;純虛擬購物車或另行設定的區塊本地取貨,應按各自流程驗收。每次測試記錄匹配區、方法、運費名稱、未稅運費、稅額與含稅總額。
官方稅務文件把運費稅項指向商店層級的 Shipping tax class(預設依購物車商品,也可指定標準、減稅或零稅率);Prices entered with tax 是商店層級價格輸入模式,不是每個配送方法的含稅/未稅開關。稅率、客戶所在地、店舖基準稅率與顯示設定都會影響結果 [5]。最常見錯誤,是把「運費無變」當成通過,卻沒發現稅額或總額已變。
五、新訂單與既有訂單要分開驗
Shortcode 自訂欄位自動保存到訂單 meta;block 按 location 分流:contact 保存到客戶及訂單,address 進兩張地址表單並保存到客戶及訂單,order 只留在訂單 [2][3]。先按位置寫規格,再確認已約定的下游是否支援;後台、電郵、發票/裝箱單、export/API 和外掛,不是每個欄位自動全部出現。未約定顯示不列失敗;有約定但沒出現才是缺口。改名時不要假設舊 key 自動搬移;要決定遷移、保留或只套用新訂單。
官方例子:新訂單會保存當時的「Prices entered with tax」設定;之後改商店設定,不改變既有訂單的課稅輸入模式 [6]。但這不代表所有配送區、運費或欄位改動都會自動重算。保守做法是開幾張舊訂單,核對地址、運費、稅項與總額,並在 staging 測試實際「重新計算」流程;重算會依商店設定與客戶地址更新稅項,並覆蓋手動修改 [6]。
六、實測矩陣:每個關鍵路徑都要有證據
下表是示例,不是定價或稅務建議。每個準備開賣的目的地、客戶類型與配送方式,至少走一條完整路徑。
| 情境 | 地址/客戶 | 要核對的配送結果 | 要核對的稅與訂單 |
|---|---|---|---|
| 本地郵遞區號 | 具體 ZIP/郵遞區號,訪客 | 是否命中窄區,而非後面的國家區 | 運費、稅額、訂單地址 |
| 同國其他地區 | 同國但不同州省/郵遞區號 | 是否落到正確的廣泛區 | 稅率是否隨地址改變 |
| 帳單與送貨不同 | 兩個不同國家或州省 | 配送區是否按送貨地址匹配 | 稅基地址與顯示是否一致 |
| 虛擬產品 | 不需要送貨的購物車 | 是否不應出現配送方法 | 稅與訂單欄位是否仍完整 |
| 已登入客戶 | 客戶檔案有舊地址 | 預填地址是否會誤導或覆蓋 | 訂單是否保存實際輸入值 |
| 舊訂單 | 改動前建立的訂單 | 已記錄的配送方法是否仍可讀 | 稅項、總額、備註是否被意外改寫 |
每條路徑留同一組證據:測試訂單 ID、結帳頁截圖或 HTML、匹配區、配送方法、運費、稅額、總額、後台欄位、客戶資料及電郵記錄。只「見到欄位」或「見到金額」不算完成。
六步核對
- 01 · 類型Checkout Block 還是 shortcode?
先確認支援方式,不要假設同一段 snippet 兩邊都生效。
- 02 · 規格欄位、必填、驗證、保存位置
把前端顯示和伺服器端資料分開記錄。
- 03 · 地址送貨地址 → 首個匹配配送區
由窄到寬排序,測邊界郵遞區號與州省。
- 04 · 金額配送方法、運費、稅、總額
無可選方法 ≠ $0 運費;運費與稅分開記。
- 05 · 訂單新訂單與舊訂單分開核對
按位置核對後台、客戶、通知與已約定 export/API。
- 06 · 閘門隔離 staging 與 Go/No-Go
測試閘門通過才放行;未知項目要列阻擋。
通過:每個關鍵地址與客戶類型都有配送區、運費、稅額、訂單證據。阻擋:錯區、錯稅、欄位失蹤、舊訂單被改寫、通知外洩。未確認 ≠ 通過。
下載完整 SVG 流程圖七、在隔離 staging 測試,不要把正式站當試場
WooCommerce 官方測試訂單文件提醒:測試訂單沒有特殊狀態,看起來可以和正式訂單一樣,亦可能觸發訂單電郵和進入分析;其他外掛或服務未必分得清測試與正式訂單。官方要求測試付款與結帳在 staging 進行,完成後刪除測試訂單 [7]。
實務上要隔離付款、電郵、快取與資料。付款只用測試 gateway 與測試卡,不用 live key 或正式收款帳戶。電郵不能只靠「停止寄信」外掛:SMTP/API、交易郵件服務或 CRM 可能繞過 wp_mail。要確認 SMTP/API 連線使用測試服務,並將所有實際收件人限制為測試地址或 sink,查看郵件記錄與服務端日誌,前後核對沒有真實收件人。開票、通知倉庫或觸發 CRM 的外掛也要改接測試;不讓測試訂單進正式報表或庫存。不要在正式站用真實客戶資料測試。
八、上線前的 Go/No-Go
可以放行:關鍵地址、客戶類型與配送方式都有證據;新欄位保存正確;舊訂單未意外改寫;無錯區、錯稅、欄位失蹤或通知外洩。
應阻擋:任何關鍵目的地錯區;運費或稅額不符預期;新欄位只在畫面出現但沒落單;舊訂單打開後自動改寫;測試通知寄到真實收件人;或仍有「未確認」項目。未確認不是通過。
最後,把改動寫進客服交接:改了哪個欄位、配送區、運費或稅務顯示、何時生效、舊訂單怎樣處理;不要承諾未測試的送達、稅務或退款安排。
要在 staging 核對結帳欄位與配送變更?
若你需要按實際 Checkout 類型、配送區、運費與稅務設定整理測試紀錄,可聯絡 Managed-WP.™ PRO。
資料來源
WooCommerce Developer — Customizing checkout fields using actions and filters
WooCommerce Developer — How to Add Additional Fields to the WooCommerce Checkout Block
WooCommerce — Single Order Page and Manually Adding an Order
編輯說明:本文由 Managed-WP.™ PRO 編輯團隊整理官方文件。測試矩陣與 staging 建議屬實務整理,不是 WooCommerce、配送商、付款網關或稅務處理的保證;版本與外掛行為可能變更,以實際環境及最新文件為準。本文不是稅務建議,也不指示在正式站建測試訂單、寄真實客戶電郵或使用 live key。