簡體   English   中英

Woocommerce 基於購物車數量和商品數量的條件運輸成本降低

[英]Woocommerce conditional shipping cost reduction based on cart amount and item count

我正在尋找一種方法來根據購物車總百分比、統一費率和每種產品的數量來降低運費...


6 件產品:統一運費 20 歐元

  • 總購物車為 120 歐元 | 運費 = 統一費率成本 - 總購物車的 10% | 20 - 12 = 8 歐元
  • 總購物車是 180€ | 運費 = 統一費率成本 - 總購物車的 10% | 20 - 18 = 2€
  • 總購物車為 220 歐元 | 運費 = 統一費率成本 - 總購物車的 10% | 20 - 22 = 0 歐元

12 件產品:統一運費 30 歐元

  • 總購物車為 120 歐元 | 運費 = 統一費率成本 - 總購物車的 10% | 30 - 12 = 18€
  • 總購物車是 180€ | 運費 = 統一費率成本 - 總購物車的 10% | 30 - 18 = 12€
  • 總購物車為 220 歐元 | 運費 = 統一費率成本 - 總購物車的 10% | 30 - 22 = 8 歐元

如何做到這一點?

這可以在沒有插件的情況下完成......

1) 您首先需要在 WooCommerce 運輸設置中為每個運輸區域設置“統一費率”方法的數量1

在此處輸入圖片說明

此金額將在我們的功能中從 1 到 11 件商品更改為20€ ,對於 12 件或更多商品更改為30€ 此金額將減少 10% 的購物車總金額。


2) 然后使用掛鈎在woocommerce_package_rates過濾器鈎子中的自定義函數,您將能夠根據購物車項目數和購物車總數對運費進行折扣。

這是代碼:

add_filter( 'woocommerce_package_rates', 'custom_package_rates', 10, 2 );
function custom_package_rates( $rates, $packages ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

    // Get some cart data and set variable values
    $cart_count = WC()->cart->get_cart_contents_count();
    $cart_total =  WC()->cart->cart_contents_total;
    $cart_10_percent = $cart_total * 0.1;
    $flat_rate_value = 20; // Default "Flat rate" value

    foreach($rates as $rate_key => $rate_values ) {
        $method_id = $rate_values->method_id;
        $rate_id = $rate_values->id;

        if( $method_id == 'flat_rate' ){
            if( $cart_count < 6 )
                $cart_10_percent = 0; // No percent discount
            elseif( $cart_count >= 12 )
                $flat_rate_value = 30; // "Flat rate" value for 12 or more items

            $rate_cost = $flat_rate_value > $cart_10_percent ? $flat_rate_value - $cart_10_percent : 0;

            // Set the new calculated rate cost
            $rates[$rate_id]->cost = number_format( $rates[$rate_id]->cost * $rate_cost, 2 );

            // Taxes rate cost (if enabled)
            $taxes = array();
            foreach ($rates[$rate_id]->taxes as $key => $tax){
                if( $tax > 0 ){ // set the new tax cost
                    // set the discounted tax cost
                    $taxes[$key] = number_format( $tax * $rate_cost, 2 );
                }
            }
            $rates[$rate_id]->taxes = $taxes;
        }
    }
    return $rates;
} 

代碼位於活動子主題(或主題)的 function.php 文件或任何插件文件中。

在 WooCommerce 3 上測試並有效。


刷新運輸緩存(有時需要)
1) 首先清空您的購物車。
2) 此代碼已保存在您的 function.php 文件中。
3) 進入運輸區域設置並禁用一個“統一費率” (例如)和“保存”。 然后重新啟用“統一費率”和“保存”。 你已經完成了,你可以測試它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM