for循环中的PHP循环

几个小时前我发布了这段代码。我设法解决了其中一个问题,但我现在只有一个问题。此代码运行良好,但我需要使用特定运输类别将每件商品的成本相乘,然后将其添加到常规运输成本中。

例如,如果我在购物车中有 5 个产品:

  • 其中 2 个使用 shipping-class-1(产品额外运费 70 美元)

  • 其中 3 个使用 shipping-class-2(产品额外运费 50 美元)

因此,如果(例如)常规运费为 120 美元,则运费应为(120 美元 + 290 美元)= 410 美元

add_filter( 'woocommerce_package_rates', 'ph_add_extra_cost_based_on_shipping_class', 10, 2);

if( ! function_exists('ph_add_extra_cost_based_on_shipping_class') ) {

    function ph_add_extra_cost_based_on_shipping_class( $shipping_rates, $package ){


        $handling_fee_based_on_shipping_class = array(

            array(

                'shipping_classes'  =>  array( 'shipping-class-1'),         // Shipping Class slug array

                'adjustment'        => 70,                                  // Adjustment

            ),

            array(

                'shipping_classes'  =>  array( 'shipping-class-2' ),

                'adjustment'        =>  50,

            ),

        );


        $shipping_method_ids = array( 'cologistics-shipping' );     // Shipping methods on which adjustment has to be applied


        $adjustment = null;

        foreach( $package['contents'] as  $line_item ) {

            $line_item_shipping_class = $line_item['data']->get_shipping_class();

            if( ! empty($line_item_shipping_class) ) {

                foreach( $handling_fee_based_on_shipping_class as $adjustment_data ) {

                    if( in_array( $line_item_shipping_class, $adjustment_data['shipping_classes']) ) {

                        $adjustment = ( $adjustment_data['adjustment'] > $adjustment ) ? $adjustment_data['adjustment'] : $adjustment;

                    }

                }

            }

        }


我将非常感谢您的帮助。


桃花长相依
浏览 97回答 1
1回答

繁花如伊

这通常不需要任何代码......您应该将您的运输方式设置如下(所以首先删除您的代码并保存):1) 因此,您将120在运输方式中保留全球成本。2)然后对于每个相关的所需运输类别,您将在相应的字段中添加:[qty]*70为了shipping-class-1[qty]*50为了shipping-class-2计算类型: Per class: Charge shipping for each shipping class individually这将起作用,并将通过根据购物车物品数量减少等级来增加成本。对于基于您的代码的自定义运输方式,您应该使用以下方式处理商品数量:add_filter( 'woocommerce_package_rates', 'ph_add_extra_cost_based_on_shipping_class', 10, 2);if( ! function_exists('ph_add_extra_cost_based_on_shipping_class') ) {    function ph_add_extra_cost_based_on_shipping_class( $shipping_rates, $package ){        $handling_fee_based_on_shipping_class = array(            array(                'shipping_classes'  =>  array( 'shipping-class-1'),         // Shipping Class slug array                'adjustment'        => 70,                                  // Adjustment            ),            array(                'shipping_classes'  =>  array( 'shipping-class-2' ),                'adjustment'        =>  50,            ),        );        $shipping_method_ids = array( 'cologistics-shipping' );     // Shipping methods on which adjustment has to be applied        $adjustment = 0;        foreach( $package['contents'] as  $line_item ) {            $line_item_shipping_class = $line_item['data']->get_shipping_class();            if( ! empty($line_item_shipping_class) ) {                foreach( $handling_fee_based_on_shipping_class as $adjustment_data ) {                    if( in_array( $line_item_shipping_class, $adjustment_data['shipping_classes']) ) {                        $adjustment += $adjustment_data['adjustment'] * $line_item['quantity'];                    }                }            }        }        if( $adjustment > 0 ) {            foreach( $shipping_rates as $shipping_rate ) {                $shipping_method_id = $shipping_rate->get_method_id();                if( in_array($shipping_method_id, $shipping_method_ids) ) {                    $shipping_rate->set_cost( (float) $shipping_rate->get_cost() + $adjustment );                }            }        }        return $shipping_rates;    }}它应该可以处理汽车项目数量的额外成本......不要忘记在运输设置中刷新运输方式,然后禁用/保存并重新启用/保存相关运输区域中的任何运输方式。其他与钩子相关的答案线程。woocommerce_package_rates
打开App,查看更多内容
随时随地看视频慕课网APP