Woocommerce同时提供两种送货方式

时间:2017-01-23 00:40:34

标签: php wordpress woocommerce shipping fedex

我有一个问题:

我有两个发货类别

1- alfa

2- beta

alfa 应按订单(不是产品)50美元,如果alfa产品总和(不含运费和税金)超过400美元,则alfa运费是免费的。 我已经完成了这个规则,只有当alfa产品没有插入图表时,它才能正常工作。

测试版应该使用fedEx送货插件进行计算,只有当测试版产品没有插入图表时,它才能正常工作。

如果我将alfa和beta产品放入图表中,我只能获得alfa规则。

我以这种方式使用树表运送插件设置规则:

USA 
Child rules rate add sum of child rates

   ALFA
   Package all items at once
   Contains specified and maybe others ALFA any amount
   Calculate fees for all matching items at once
   Other shipping plugins FEDEX add all rates

   BETA
   Contains specified and maybe others BETA subtotal without tax and discount below 400$
   Charge Flat Fee 50$

   BETA
   Contains specified and maybe others BETA subtotal without tax and discount above 400$
   Free shipping

2 个答案:

答案 0 :(得分:0)

按装运班拆分购物车,同时选择" Capture"选项,以便在处理装运类包后不处理后续规则。创建子规则,每个规则都应包含各自的运输类别。没有其他人"选项,以便每条规则仅适用于各自的运输类别。

答案 1 :(得分:0)

得到这个snippet from here

 add_filter( 'woocommerce_cart_shipping_packages', 'wf_split_cart_by_shipping_class_group' );

    function wf_split_cart_by_shipping_class_group($packages){

        //Reset packages
        $packages               = array();

        //Init splitted package
        $splitted_packages      =   array();

        // Group of shipping class ids
        $class_groups   =   array(
            'group1'    =>  array(9,10),
            'group2'    =>  array(20),
            'group3'    =>  array(11,15,17),        
        );  

        // group items by shipping classes
        foreach ( WC()->cart->get_cart() as $item_key => $item ) {
            if ( $item['data']->needs_shipping() ) {

                $belongs_to_class_group =   'none';

                $item_ship_class_id =   $item['data']->get_shipping_class_id();

                if($item_ship_class_id){

                    foreach($class_groups as $class_group_key   =>  $class_group){
                        if(in_array($item_ship_class_id, $class_group)){                
                            $belongs_to_class_group =   $class_group_key;
                            continue;
                        }
                    }

                }           

                $splitted_packages[$belongs_to_class_group][$item_key]  =   $item;
            }
        }

        // Add grouped items as packages 
        if(is_array($splitted_packages)){

            foreach($splitted_packages as $splitted_package_items){
                $packages[] = array(
                    'contents'        => $splitted_package_items,
                    'contents_cost'   => array_sum( wp_list_pluck( $splitted_package_items, 'line_total' ) ),
                    'applied_coupons' => WC()->cart->get_applied_coupons(),
                    'user'            => array(
                         'ID' => get_current_user_id(),
                    ),
                    'destination'    => array(
                        'country'    => WC()->customer->get_shipping_country(),
                        'state'      => WC()->customer->get_shipping_state(),
                        'postcode'   => WC()->customer->get_shipping_postcode(),
                        'city'       => WC()->customer->get_shipping_city(),
                        'address'    => WC()->customer->get_shipping_address(),
                        'address_2'  => WC()->customer->get_shipping_address_2()
                    )
                );
            }
        }

        return $packages;
    }