Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
讓WooCommerce的商品分開結帳其實是蠻常見的需求,譬如冷凍商品跟一般商品無法一起寄送,就需要分開結帳、計算運費,這時只要為不同的商品設置不同的運送方式,就會顯示無法一起結帳,這是WooCommerce中自有的功能。
這次遇到的專案則是比較特別,商店裡有 <類別A – 定期扣款的數位商品> 和 <類別B – 一般商品>,由於類別A是虛擬商品,沒有運送方式,所以 A + B 一同放入購物車依舊可以進行結帳,但如果選擇類別A的定期定額結帳,那一般商品的金額也會變成定期扣款,選擇其他結帳方式則無法實現定期定額扣款。
要解決這個問題有許多方式,可以修改WooCommerce的購物車程式碼,設定加入類別A的商品之後,會清空購物車其他商品,只保留類別A,或是加入類別B商品之後,有類別A商品在購物車內會清空類別A;另一個方式是直接設定不同類別用指定方式結帳,以下選用後者的做法,比較簡單也好維護。
下載外掛: Conditional Payments for WooCommerce – WordPress plugin | WordPress.org
並在WooCommerce > 設定 > Restrictions 下設定條件,以上面的例子,設置類別A只能使用定期定額的結帳方式,所以把其他結帳方式都排除掉,並指定,如果購物車裡有類別A的商品時套用條件。
搭配條件設置有許多做法,譬如也可以設置如果購物車裡全是類別B的產品的時候,只排除定期定額的扣款方式,但因為這個例子中,後續客戶可能會自行新增類別C, 類別D,就必須再手動加上條件,例子中的類別A則是固定不變的,所以使用類別A作為唯一條件比較好維護。
上圖設置完成之後,購物車裡含有類別A的商品,只會出現定期定額的選項,但這個設定還不夠,這個條件不排除其他類別,表示購物車中同時有其他類別的商品時,一樣可以使用定期定額的方式結帳,所以需要再設定另一個規則:
這規則的意思是,如果購物車中,不是全部的商品都是類別A,就排除定期定額的結帳方式,由於前一個條件已經限制類別A只能用定期定額的方式結帳,所以購物車之中只要同時有類別A跟其他類別就會產生衝突導致無法結帳,後續再修改WooCommerce的預設錯誤訊息,去提示消費者移除無法同時結帳的商品。
這次的例子比較特別,一般來說只要設定不同運送方式就可以讓商品分開結帳,但虛擬商品無法指定運送方式,又由於 WooCommerce 內建無法指定類別或個別商品用特定方式結帳,才會需要修改程式碼或透過外掛來達成。如果有更複雜的結帳和運送需求,可考慮安裝多重商店/供應商的外掛,達到分開結帳的需求,但這類外掛一般都需要付費,需再評估斟酌使用。