This can be achieved using Table Rate Shipping or a code snippet like shown below. These code snippets can be added to your theme/child-theme’s functions.php file. Before adding the snippets, make sure you clear your WooCommerce cache (WooCommerce > System Status > Tools > WC Transients > Clear transients), as shipping methods are cached.
Snippets for WC 2.6+
This snippet hides everything but free_shipping if it’s available and is compatible with Shipping Zones.
Snippets for WC 2.5
Show only free shipping in all states except… ↑ Back to Top
Show only free shipping in all states except exclusion list, hide free shipping if the customer is in one of the states listed:
Enable Shipping Methods on a per Class / Product Basis ↑ Back to Top
If you want to have more flexibility, we recommend you to use this free plugin!