switch sub-total with shipping in cart woo code example
Example 1: add shipping rate based on cart total woocommerce
add_filter('woocommerce_package_rates', 'shipping_cost_based_on_weight', 12, 2);
function shipping_cost_based_on_weight( $rates, $package ){
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return $rates;
$cost1 = 5;
$cost2 = 9;
$cost3 = 9;
$total_weight = WC()->cart->get_cart_contents_weight();
foreach ( $rates as $rate_key => $rate ){
$has_taxes = false;
if( 'flat_rate' === $rate->method_id ){
$initial_cost = $new_cost = $rates[$rate_key]->cost;
if( $total_weight <= 6 ) {
$new_cost = $cost1;
}
elseif( $total_weight > 6 && $total_weight <= 12 ) {
$new_cost = $cost2;
}
else {
$new_cost = $cost3;
}
$rates[$rate_key]->cost = $new_cost;
$taxes = [];
foreach ($rates[$rate_key]->taxes as $key => $tax){
if( $rates[$rate_key]->taxes[$key] > 0 ){
$initial_tax_cost = $new_tax_cost = $rates[$rate_key]->taxes[$key];
$tax_rate = $initial_tax_cost / $initial_cost;
$taxes[$key] = $new_cost * $tax_rate;
$has_taxes = true;
}
}
if( $has_taxes )
$rates[$rate_key]->taxes = $taxes;
}
}
return $rates;
}
Example 2: add shipping rate based on cart total woocommerce
add_filter( 'woocommerce_package_rates', 'tl_shipping_on_price', 10, 2 );
function tl_shipping_on_price( $rates, $package ) {
$total = WC()->cart->cart_contents_total;
if( $total <= 500 ) {
unset( $rates['flat_rate'] );
unset( $rates['free_shipping'] );
} elseif ( $total > 500 && $total < 1000 ) {
unset( $rates['local_delivery'] );
unset( $rates['free_shipping'] );
} else {
unset( $rates['local_delivery'] );
unset( $rates['flat_rate'] );
}
return $rates;
}