【问题标题】:Progressive flat rate based on the cart's subtotal percentage in WooCommerce基于购物车在 WooCommerce 中的小计百分比的累进统一费率
【发布时间】:2020-12-02 08:00:58
【问题描述】:

在 WooCommerce 中,我尝试根据购物车小计的 10% 设置累进运费,最低成本为 5 美元,最高成本为 11 美元。

这是我的代码尝试:

add_filter( 'woocommerce_package_rates', 'woocommerce_package_rates', 10, 2 );
function woocommerce_package_rates( $rates, $package ) {
    // Make sure flat rate is available
    if ( isset( $rates['flat_rate:24'] ) ) {
        // Set the cost to $5
        $rates['flat_rate:24']->cost = 5;
    }
    $cart_subtotal = $WC()->cart->subtotal
    if ($cart_subtotal >50)

    $percentage = 0.10;  // Percentage (10%) in float
    $percentage_fee = ( WC()->cart->subtotal >+ WC()->cart->get_shipping_total()) * $percentage;
    }
 
    });
    return $rates;
}

此代码在网站上出现严重错误。我对 Wordpress 自定义编码很陌生,您可能会从下面的代码中看出这一点。

我还希望显示的标签显示“USPS”而不是“统一费率”。

例如,如果购物车小计为 60 美元,他们将被收取 6 美元的统一运费(小计的 10%)。

我错过了什么或做错了什么?

【问题讨论】:

    标签: php wordpress woocommerce cart shipping-method


    【解决方案1】:

    您提供的代码中有很多错误...以下将允许您根据购物车小计百分比设置从5$11$ max 的运费。

    首先,您需要在统一费率设置中设置成本5(以及“UPS”作为标签)。

    然后使用这个代码:

    add_filter( 'woocommerce_package_rates', 'woocommerce_package_rates', 10, 2 );
    function woocommerce_package_rates( $rates, $package ) {
        $max_cost   = 11; // Here set the max cost for the shipping method
        $percentage = 10; // Percentage to apply on cart subtotal
        $subtotal   = WC()->cart->get_subtotal(); // Cart subtotal without taxes
    
        // Loop through shipping rates
        foreach ( $rates as $rate_key => $rate ) {
            // Targetting specific flate rate shipping method
            if ( 'flat_rate:14' === $rate_key ) {
                $has_taxes = false;
                $base_cost = $rate->cost; // 5$ from this shipping method cost setting
                $new_cost  = $subtotal * $percentage / 100; // Calculation
    
                if( $new_cost > $base_cost ) {
                    // 1. Rate cost
                    if ( $new_cost < $max_cost ) {
                        $rates[$rate_key]->cost = $new_cost;
                        $rate_operand = $new_cost / $base_cost; // (for taxes if enabled)
                    } else {
                        $rates[$rate_key]->cost = $max_cost;
                        $rate_operand = $max_cost / $base_cost; // (for taxes if enabled)
                    }
                    // 2. Taxes rate cost (if enabled)
                    foreach ($rates[$rate_key]->taxes as $key => $tax){
                        if( $tax > 0 ){
                            // New tax calculated cost
                            $taxes[$key] = $tax * $rate_operand;
                            $has_taxes = true;
                        }
                    }
                    // Set new taxes cost
                    if( $has_taxes ) {
                        $rates[$rate_key]->taxes = $taxes;
                    }
                }
            }
        }
        return $rates;
    }
    

    代码在您的活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。

    刷新运输缓存:

    1. 此代码已保存在您的 functions.php 文件中。
    2. 在运输区域设置中,禁用/保存任何运输方式,然后启用返回/保存。

      您已完成,您可以对其进行测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 2019-01-23
      • 2019-12-19
      相关资源
      最近更新 更多