本篇文章更新時間:2020/04/01
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
「全館購物滿額 XXX 元免運費」這樣的行銷手法不少見,處理的方法也有外掛的。
不過外掛非萬能,總還是有碰到意外的點。下方筆記使用程式化的做法。方法主要參考之前一篇 [WordPress] WooCommerce 客製化運費規則的方法。
function mxp_shipping_fee_discount() {
$fee = 0; // 新增運費底價
if (is_admin() && !defined('DOING_AJAX')) {
// 避免在管理介面下被觸發
return;
}
$total_pirce = 0;
/*foreach (WC()->cart->get_cart() as $item => $values) {
// 撈取購物車中的每一個商品
$_product = wc_get_product($values['data']->get_id());
// 商品名稱
$product_name = $_product->get_title();
// 商品數量
$qty = $values['quantity'];
// 商品價格
$total_price += $qty*$_product->get_price();
// 商品設定的運送類別
$shipping_class = $_product->get_shipping_class();
}*/
$total_price = intval(WC()->cart->get_cart_contents_total());
foreach (WC()->session->get('shipping_for_package_0')['rates'] as $method_id => $rate) {
// 判斷當前選擇的運送方法與目前購物車總金額是否大於 699
if (WC()->session->get('chosen_shipping_methods')[0] == $method_id && $total_price >= 699) {
$rate_label = $rate->label; // 當前運費標籤名稱
$rate_cost_excl_tax = floatval($rate->cost); // 不含稅率的運費
// 紀錄稅率費用
$rate_taxes = 0;
foreach ($rate->taxes as $rate_tax) {
$rate_taxes += floatval($rate_tax);
}
// 包含稅率費用的總運費
$rate_cost_incl_tax = $rate_cost_excl_tax + $rate_taxes;
if ($rate_cost_incl_tax != 0) {
WC()->cart->add_fee('滿699免運費', -$rate_cost_incl_tax, false);
}
break;
}
}
}
add_action('woocommerce_cart_calculate_fees', 'mxp_shipping_fee_discount');
Gist: Link
已滿額 699 免運為例,這樣寫就能把費用做判斷扣除,購物車或是結帳頁面都有效。
方法參考:Get the Cart shipping label and cost in Woocommerce
版主您好
感謝提供方法,我有套用這一段程式
一開始會觸發,但下次再使用就不會觸發, 不知版主知不知道可能的原因?不好意思打擾惹
這樣的問題描述太模糊,我很難判斷,是否有使用的主題與 WooCommerce 版本資訊?
WooCommerce: 3.8.1
Theme: Konte – Minimal & Modern
我是用程式碼片段的 Plugin,新增這段 Code
如果可以可以給您網站可以給您網站,個人網址那,方便的話,謝謝
不好意思,我找到問題點了
是我變更購物車數量時不會觸發更新是否免運的資訊,這部份是不是要再寫一個判斷,當購物車數量變更,再再觸發檢查一次
哦哦,你說的這塊就不在我這篇的討論範圍囉! 請參考我過去的文: https://www.mxp.tw/5941/
不好意思,這部分已經已使用相關外掛執行 AJAX CART Update,想請教這個程式化處理購物車運費折扣需要做甚麼動作才會跟著一起更新,我交叉式了一下,不管是用外掛或是參考您過去的小程式,都無法達成
我剛有更新寫法,再試試更新看囉~
感謝大大幫忙,沒問題了!!!