Are you finding ways to hide shipping methods when Free Shipping is enabled? Trying to hide shipping methods for Shipping Classes ?
There are many plugins for this which will cost you $$$.
Here we will discuss, how you can do it free.
References
Need Help? Contact us at fb.me/getwpsupport
Open your themes functions.php file and insert the below code
add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );
function hide_shipping_method_based_on_shipping_class( $rates, $package )
{
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// HERE define your shipping class to find
$class = 100;
// HERE define the shipping methods you want to hide
$method_key_ids = array('flat_rate:7', 'local_pickup:3');
// Checking in cart items
foreach( $package['contents'] as $item ) {
// If we find the shipping class
if( $item['data']->get_shipping_class_id() == $class ){
foreach( $method_key_ids as $method_key_id ){
unset($rates[$method_key_id]); // Remove the targeted methods
}
break; // Stop the loop
}
}
return $rates;
}
Replace 100 with your original class id
Finding the shipping class ID.
1) In the database under wp_terms table:
Search for a term name or a term slug and you will get the term ID (the shipping class ID).
Replace flat_rate:7, local_pickup:3 with your shipping methods name that you would like to hide.
To get the related shipping methods rate IDs, something like flat_rate:7, inspect with your browser code inspector each related radio button attribute name like:

