这可能不是最好的方法,但它是有效的。由于我无法以更聪明的方式获得运输类成本,我使用了
运输类别描述字段
作为一个值。所以如果“中等”课程的成本是80,我的描述也是80。
假设您只使用一种运输方式“统一费率”,这就是有效的代码。
add_filter('woocommerce_package_rates', 'shipping_costs_discounted_based_on_shipping_class', 10, 2);
function shipping_costs_discounted_based_on_shipping_class( $rates, $package ){
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return $rates;
$shipping = new \WC_Shipping();
$shipping_classes = $shipping->get_shipping_classes();
$all_shipping_costs = array();
foreach( $package['contents'] as $cart_item ) {
foreach($shipping_classes as $shipping_class) {
if( $cart_item['data']->get_shipping_class() == $shipping_class->slug )
array_push($all_shipping_costs, $shipping_class->description);
}
}
$max_value=max($all_shipping_costs);
$new_rate=$max_value + (array_sum($all_shipping_costs)-$max_value)*0.50;
foreach ( $rates as $rate_key => $rate ){
if( 'flat_rate' === $rate->method_id ){
$rates[$rate_key]->cost = $new_rate;
}
}
return $rates;
}
再一次,这是一个可行的解决方案,但不是最好的。
注意:后端的“运输类别描述”字段需要与“运输成本”字段具有完全相同的值!