为了账号安全,请及时绑定邮箱和手机立即绑定

基于 WooCommerce 中购物车小计百分比的累进统一费率

基于 WooCommerce 中购物车小计百分比的累进统一费率

PHP
长风秋雁 2023-09-30 15:58:43
在 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%)。我错过了什么或做错了什么?
查看完整描述

1 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

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

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

https://img1.sycdn.imooc.com//6517d56b0001964006470204.jpg

然后使用这段代码:


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. 在运输区域设置中,禁用/保存任何运输方式,然后启用返回/保存。

    你已经完成了,你可以测试它。


查看完整回答
反对 回复 2023-09-30
  • 1 回答
  • 0 关注
  • 60 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信