Free Shipping When the Cart Has a Category
Offers free shipping whenever the cart contains a product from a chosen category, handy for promoting a new collection or bulky-but-profitable lines.
Opens WPIDE on
Code
$wpide_free_ship_cats = array( 'new-collection' ); // Category slugs.
$wpide_free_ship_mode = 'any'; // 'any' item or 'all' items must match.
add_filter( 'woocommerce_shipping_free_shipping_is_available', function ( $available, $package ) use ( $wpide_free_ship_cats, $wpide_free_ship_mode ) {
if ( $available || empty( $package['contents'] ) ) {
return $available;
}
$matches = 0;
foreach ( $package['contents'] as $item ) {
$id = $item['product_id'];
if ( has_term( $wpide_free_ship_cats, 'product_cat', $id ) ) {
$matches++;
}
}
return 'all' === $wpide_free_ship_mode ? count( $package['contents'] ) === $matches : $matches > 0;
}, 20, 2 );
Notes
Uses category slugs; set $wpide_free_ship_mode to 'all' to require every item in the cart to be in those categories.
How to add this snippet
- Install WPIDE on your WordPress site (it is free) and open Code Snippets.
- Use snippet above adds it from the library in one click. Or copy the code into a new snippet with the same code type.
- It is added inactive: review the code and settings, then switch it on.