If Free Shipping is available, you possibly don’t want to show the other paid shipping options. WooCommerce shows by default all shipping rates that match a given shipping zone, so it’s not possible to achieve this from the settings alone.
You need PHP for that. In this example, we will disable all shipping methods but “Free Shipping” so that free shipping remains the only possible choice. And here’s the code to add to your functions.php
PHP Snippet #1: Unset Specific Shipping Rate When Free Shipping rate is available
/** * @snippet Hide one shipping option in one zone when Free Shipping is available * @how-to Get CustomizeWoo.com FREE * @author Rodolfo Melogli * @compatible WooCommerce 3.6.3 * @donate $9 https://businessbloomer.com/bloomer-armada/ */ add_filter( 'woocommerce_package_rates' , 'bbloomer_unset_shipping_when_free_is_available_in_zone' , 10, 2 ); function bbloomer_unset_shipping_when_free_is_available_in_zone( $rates , $package ) { // Only unset rates if free_shipping is available if ( isset( $rates [ 'free_shipping:8' ] ) ) { unset( $rates [ 'flat_rate:1' ] ); } return $rates ; } |
PHP Snippet #2: Unset ALL Shipping Rates in ALL Zones when ANY Free Shipping Rate is Available
/** * @snippet Hide ALL shipping rates in ALL zones when Free Shipping is available * @how-to Get CustomizeWoo.com FREE * @sourcecode https://businessbloomer.com/?p=260 * @author Rodolfo Melogli * @compatible WooCommerce 3.6.3 * @donate $9 https://businessbloomer.com/bloomer-armada/ */ add_filter( 'woocommerce_package_rates' , 'bbloomer_unset_shipping_when_free_is_available_all_zones' , 10, 2 ); function bbloomer_unset_shipping_when_free_is_available_all_zones( $rates , $package ) { $all_free_rates = array (); foreach ( $rates as $rate_id => $rate ) { if ( 'free_shipping' === $rate ->method_id ) { $all_free_rates [ $rate_id ] = $rate ; break ; } } if ( empty ( $all_free_rates )) { return $rates ; } else { return $all_free_rates ; } } |
Shipping Rates Not Working After Implementing this PHP?
You probably need to:
a) empty the Cart and start testing again
b) clear customer sessions:
No comments:
Post a Comment