Offering free shipping can be a good way to get your customers over the line in a sale.
However, you might not want to offer free shipping across your entire WooCommerce store. For example, you might sell both smaller and larger products, and only want to offer free shipping for the smaller ones.
WooCommerce isn't without its quirks, and it's shipping settings are definitely not excused from this. In fact, there isn't actually a 'free shipping' setting you can set on a product directly.
But no need to worry, today we are going to show you the methods to can use to apply free shipping per product in WooCommerce.
Lets jump in!
This is the quickest and easiest way to configure free shipping per product in WooCommerce.
To get this done, simply change the specific products to be Virtual, like you would a downloadable file.
So for example, for our demo store — Shoppu Records — we have the record, Varech - Henri Texier for sale:
Currently, we offer flat rate shipping to Australia. So when go to to check out, this shipping rate is automatically applied:
If we navigate to the actual product and click edit:
We can change the product to a virtual product by ticking the 'Virtual' box:
Now when we go to checkout, there is no shipping cost associated with this product:
And if we add another item to the cart, the shipping for that item will be applied:
While this method is by far the quickest and easiest way of applying free shipping to an individual product in WooCommerce, it has 2 main caveats/issues:
It doesn't make it explicitly clear that there is free shipping. Rather it just omits any mention of shipping all together (the behaviour you would expect for a virtual product). Similarly, it only shows the billing address field. This could cause confusion for your customers.
If it’s just a virtual product in the cart, WooCommerce won’t allow the user to use a different shipping address (they can only enter their billing address). However, we found a way around this. Simply add the following code to the ‘custom functions’ area of your functions.php file (our using a plugin that allows you to add code snippets to your theme):
You can avoid the caveats of method two by assigning free shipping using WooCommerce shipping classes. To do this:
1. Click on WooCommerce in the sidebar, then Settings > Shipping > Shipping classes:
2. Click the 'Add shipping class' button, and add two classes — a free shipping class, and another class for your other products (I'm calling it Records):
3. Click Shipping zones > Add shipping zone. From here you can create different shipping zones for different areas in the world. I'm going to create one for Australia:
4. Then click 'Add shipping method'. Choose Flat rate and then click the other 'Add shipping method' button:
5. Hover over 'Flat rate' and click edit. For the settings here:
Method title: Call this 'Shipping Charge'.
Cost: Keep this as 0.
"Free shipping" class cost: 0.
"Record (other shipping class)" shipping class cost: Your flat rate shipping cost. For me, this is $25.
6. For the last step, we need to add the shipping classes to our products.
Head to your products that you want to add free shipping to, click Shipping, and then add the free shipping class.
And for your items with flat rate shipping, add the other class:
And you're done. When you add a product with the free shipping class to the cart, the shipping charge will be $0:
And when you add another product with the Records shipping class, the flat rate shipping charge will be applied to the cart:
There are a number of different plugins available to help with adding free shipping per product in WooCommerce. These all differ in features and price. Some of the ones to look at are:
If you are comfortable coding (or have a developer on your team), you can use the following code:
You’ll need to change the product IDs to be those of the products you want to apply free shipping to.
That's a wrap. Hopefully one of these methods will help you in your quest to apply free shipping per product in WooCommerce. If you are interested in going deeper in WooCommerce shipping, we have a few other posts as well: