Applying free shipping on orders can be great incentive for (potential) customers to order on your website. In some cases it is not possible to ship all products free and you only want to ship a specific product or group of products to ship for free. In this post I will go through setting this up. Note that there are different use cases, plugins etc that can be used by people. I will try to go over the most common ones in this blog post.
Using WooCommerce Advanced Free Shipping
WooCommerce Advanced Free Shipping (WAFS) is a plugin that I created that allows you to setup free shipping for the entire order. There is no way for that plugin to allow free shipping for one specific product (as it doesn’t know how the original shipping cost has been setup). This question arises from time to time, so I wanted to make this clear.
Apply free shipping when using a shipping carrier plugin
When you’re using a shipping carrier plugin like UPS, FedEx USPS etc that is getting live quotes from their respective API you can accomplish this in various ways.
One of those ways is by setting either (or both) the weight and dimensions to
0. Depending on the shipping carrier, they may use the weight or size to calculate the shipping cost based on that. When a product has
0 weight it shouldn’t take that in account for shipping.
I’ve never used shipping carrier plugins like this, but I’ve had multiple users confirm this to me.
This may or may not work for you was you will have inaccurate data for some products in case you were using the weight/dimensions field.
Splitting the order
A user of the WAFS plugin came with this solution, and it works really well in many cases. I’ve written about splitting shipping packages before. When you split an order into multiple packages, you can use the ‘WooCommerce Advanced Shipping’ plugin to setup free shipping for the package that contains the products you want to ship for free.
Another method is to have a regular (WC Core) free shipping rate, and hide it by excluding it from the paid shipping packages (you’d have to keep up with this if you create more packages in the future).
Apply free shipping when setting up your own shipping cost
This is a hard one as it is really dependent on how you calculate your shipping cost.
If you’re using shipping classes to setup the shipping cost you can easily assign a ‘free shipping’ class to those products who you want to have free shipping, and assign shipping costs to the other classes.
Weight based shipping cost
If you’ve setup your shippnig cost to be weight based it can be difficult, but there are still some options available.
1) Splitting the order into multiple packages as described above (and below again)
2) Setting the weight in the product to
0. This will make sure that you weight shipping rules do not take this product in account.
3) Changing the matching function. This one is with my own plugins in mind, as they allow the matching function to be changed, letting you create your own matching functionality, and thus exclude the weight of the free shipping products from the total weight. This requires custom coding and does require programming knowledge.
If you have a flat rate for shipping than this shouldn’t change much.
Splitting the order
The same technique can be used here as described above. By splitting the order and setting up free shipping for the package that contains the free shipping products.
I need your help
Did you read the post and didn’t find a solution useful for your case? Please let me know in the comments below. If its a good use case I will add it to the post. That way I can extend the post to include more and better solutions.