WooCommerce – enable free shipping only if product class is found in cart.

·

<?php // Do not include this if already open!

/**
* Code goes in theme functions.php. Free Shipping Method must be enabled.
*/
add_filter( 'woocommerce_shipping_free_shipping_is_available', 'free_shipping_based_on_cart_shipping_class' );

function free_shipping_based_on_cart_shipping_class( $is_available ) {

	/**
	* This example enables free shipping only when an item is found in the cart with a class named 'free_shipping'
	*/
	$cart_items = WC()->cart->get_cart();
	$found = false;

	foreach ( $cart_items as $cart_item ) {
		$product = $cart_item['data'];
		$class = $product->get_shipping_class();

		if ( 'free_shipping' === $class ) {
			$found = true;
			break;
		}
	}

	return $is_available && $found;
}