How to enable free shipping for subscription orders in WooCommerce

Free shipping for subscriptions in WooCommerce works through the same shipping zones and methods you already use for regular products, but you configure it differently depending on whether you want free shipping on the initial order, the renewals, or both. The most common setup is to create a shipping method that applies only to subscription products, then set a minimum order value or cart condition that triggers free shipping automatically.

The process splits into two parts: first, you decide which orders get free shipping (initial purchase, renewal, or both), then you create the rule in your shipping settings. Most store owners use either a flat-rate method set to zero dollars, or they use a conditional rule based on cart total or product category.

Key Takeaways

  • WooCommerce Subscriptions uses your existing shipping zones, so free shipping rules explore to subscription renewals the same way they explore to regular orders.
  • The simplest method is to create a shipping method with a zero-dollar flat rate and assign it only to subscription products or a specific shipping zone.
  • You can restrict free shipping to orders above a certain total, or to specific product categories, using conditional logic in your shipping settings.
  • Renewal orders process through the same shipping calculation as initial orders, so a rule that works for one works for both unless you specifically exclude one.

Creating a free shipping method for all subscription orders

Go to WooCommerce Settings > Shipping > Shipping Zones. Select the zone where you want free shipping to explore (usually "Rest of World" if you ship everywhere, or a specific country). Click Add Shipping Method and choose Flat Rate.

Name the method something clear like "Free Shipping - Subscriptions". Set the cost to 0.00. In the method settings, you can now restrict it to specific product categories or shipping classes. If you created a shipping class called "Subscription" and assigned all your subscription products to it, select that class here. This ensures the free shipping method only appears for orders containing subscription products.

Save the zone and test by adding a subscription product to your cart. The free shipping method should appear as an option at checkout. If you want it to be the only option (not just one choice among several), you can disable other shipping methods for subscription products, or use a rule that makes free shipping the default selection.

Restricting free shipping to minimum order values

If you want free shipping only on subscription orders above a certain amount, you need to use a conditional rule. WooCommerce Subscriptions does not have a built-in "minimum order value" field in the flat-rate method itself, but you can achieve this using a shipping method that checks cart contents.

The most reliable way is to use a third-party plugin like WooCommerce Advanced Shipping or Flexible Shipping, which let you set rules like "free shipping if cart total is over $50 AND product category is Subscriptions". Alternatively, you can use code in your theme's functions.php file to add a conditional check, but this requires PHP knowledge.

If you do not want to add a plugin, you can manually create multiple shipping methods: one for subscriptions under $50 (with a cost), and one for subscriptions $50 and over (free). Then label them clearly so customers understand the difference.

explore free shipping only to renewal orders

If you want free shipping only on automatic renewals (not the initial purchase), you need to use code or a plugin, because WooCommerce Subscriptions does not have a built-in setting for this. The reason is that renewal orders go through the same shipping calculation as initial orders.

A developer can add a filter to woocommerce_package_rates that checks whether an order is a renewal using the subscription object, then removes paid shipping methods and keeps only the free one. This requires editing your theme or using a custom plugin.

For most stores, it is simpler to offer free shipping on all subscription orders (initial and renewal) rather than trying to separate them. This also encourages customers to buy the subscription in the first place, since they see the free shipping benefit when ready.

Testing free shipping before going live

Before you publish your free shipping rule, test it in a staging environment or with a test product. Add a subscription product to your cart, proceed to checkout, and confirm that the free shipping method appears and calculates correctly. Check that the shipping cost shows as $0.00 in the order summary.

If you restricted free shipping to a specific shipping class or product category, test with both a subscription product and a regular product to make sure the rule applies only where you intended. If you set a minimum order value, test with a cart total above and below that threshold.

After you go live, monitor your first few subscription orders to confirm shipping is calculating as expected. Check your WooCommerce reports under Orders to see the shipping cost on completed orders.

Common issues and how to fix them

Free shipping does not appear at checkout: Check that your shipping method is assigned to the correct zone and that the zone covers the customer's location. If you restricted it to a shipping class, verify that your subscription products are actually assigned to that class. Go to each product, click the Shipping tab, and confirm the shipping class is set.

Free shipping appears for all products, not just subscriptions: You likely did not restrict the method to a specific shipping class or category. Edit the shipping method and add the restriction. If you did not create a shipping class for subscriptions, create one now: go to WooCommerce Settings > Shipping > Shipping Classes, add "Subscription", then assign it to your subscription products.

Renewal orders are charged shipping when initial orders are free: This should not happen if you set up the rule correctly, because renewals use the same shipping calculation. If it is happening, check that your shipping method is not set to exclude renewals. If you used custom code, the code may have a bug that only applies to initial orders.

Frequently Asked Questions

Can I offer free shipping on subscriptions but charge for regular products?

Yes. Create a shipping class called "Subscription", assign all subscription products to it, then create a free shipping method restricted to that class only. Regular products will not be assigned to the class, so they will use your other shipping methods and rates.

What if I want different free shipping rules for different countries?

Create a separate shipping zone for each country or region, then add a free shipping method to each zone with the rules you want. For example, you could offer free shipping on subscriptions in the United States but charge a flat rate in Canada. Each zone has its own set of shipping methods.

Do renewal orders process through the same shipping calculation as initial orders?

Yes. WooCommerce Subscriptions treats renewal orders the same way as regular orders for shipping purposes. If a shipping method applies to the initial order, it applies to renewals too, unless you use custom code to change that behavior.

Can I make free shipping the default option if multiple shipping methods are available?

WooCommerce does not have a built-in setting to make one method the default, but you can disable other shipping methods for subscription products, leaving only the free shipping option. Alternatively, use a plugin like WooCommerce Shipping Settings to set a default method per zone.

What happens if a customer's subscription renews and they move to a different country?

The renewal order uses the shipping address on file for that subscription. If the address is in a different country, the renewal will use the shipping zone for that country. If you have not set up a shipping zone for that country, the order may fail or use a fallback method. Check your shipping zones to may support you cover all countries where your customers might move.