# 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.

- Type: PHP
- Runs: Run everywhere
- Category: [WooCommerce](https://wpide.com/library/category/woocommerce/)
- Requires: WooCommerce
- Tags: woocommerce, shipping, free-shipping, categories
- Author: WPIDE Team
- Installs: 0
- Updated: 2026-10-28
- Page: https://wpide.com/library/woo-free-shipping-for-category/

## Code

```php
$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 use it

Install the free WPIDE plugin (https://wordpress.org/plugins/wpide/), find "Free Shipping When the Cart Has a Category" in its snippet library and add it in one click; or create a new PHP snippet in WPIDE (or any code snippets plugin) and paste the code above. More snippets: https://wpide.com/library/
