我有一个问题:
我有两个发货类别
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
答案 0 :(得分:0)
按装运班拆分购物车,同时选择" Capture"选项,以便在处理装运类包后不处理后续规则。创建子规则,每个规则都应包含各自的运输类别。没有其他人"选项,以便每条规则仅适用于各自的运输类别。
答案 1 :(得分:0)
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;
}