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.

Setting weight/dimensions

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’ (WAFS will support shipping packages soon) plugin to setup free shipping for the package that contains the products you want to ship for free.

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.

Shipping class

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.

Flat rate

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.

  • Jeroen Sormani

    I'm a professional WordPress plugin developer on a mission to create the best plugins for my clients. I'm specialised in developing general WordPress, WooCommerce and Easy Digital Downloads plugins.

    Interested in talking about a WordPress project? Get in touch!

    Follow me on Twitter
  • 9 thoughts on “Apply Free Shipping for Specific Products in WooCommerce

    Susan March 2, 2016 at 4:59 pm

    We have USPS and UPS shipping options. I tried to zero out weight and dimensions on the products that offer free shipping. But it still brings up USPS priority mail shipping charges on those products, it removes the UPS shipping charges. Any other thoughts on how we can achieve removing the shipping for those set of products? We have to be able to allow multiple address shipping as well for the entire cart which could have free shipping products and cost shipping products. Thank you!!

    jeroen March 2, 2016 at 9:45 pm

    Hi Susan,

    One suggestion would be to make it a virtual product, but that could also have some unexpected side-effects, so be careful!

    Another is suggested in the post, by splitting the order into multiple packages and create a free shipping package. It could be that the multiple address plugin is also making use of this, so that should be taken into account 😉


    Chris Bakker March 23, 2016 at 3:33 pm


    I am using woocommerce to sell products, but the 20kg bags i sell should have free shipment, but the other products should have shipment costs,

    i only get free shipment on € not on weight, how do i change this?

    jeroen March 24, 2016 at 10:46 pm

    Hi Chris,

    Not sure what you mean with “i only get free shipment on € not on weight”
    But what I’d advise is the way of splitting the shipment in two packages, and setup free shipping for the one with the 20kg bags.


    Jan September 20, 2016 at 11:18 am

    Thanks for the tip of applying free shipping with a shipping carrier plugin, used weight and that worked exactly as it should – displaying an extra shipping option if a product with weight was added to the cart.

    Randy Maningas December 6, 2016 at 9:54 pm

    Was wondering if you could help me? I am trying to configure our shipping so that only product variations selected to have free ground shipping only show the “Free Ground Shipping” option only in the cart. In other words if you don’t select the variation “Free Ground Shipping” will not show in the shipping options. We are using a UPS (Basic) WooCommerce pluglin. And I have set the Shipping class and zones for free ground shipping. I hope you can help me!

    Jeroen December 7, 2016 at 2:23 pm

    Hi Randy,

    You should be able to set this up using my Advanced Shipping plugin. Here you can setup the condition to ‘contains shipping class’ and check whether a free shipping product is in the cart. There’s also the option to hide all the other rates when free is available, which may also be useful for your scenario.


    Jeroen January 17, 2017 at 6:02 pm

    I’m looking for a solution for the following:

    If a customer orders a minimum amount of a specific product AND lives in a specific shippingzone (based on zipcode) shipping should be free. Otherwise the fixed shippingcost should be applied.

    Any ideas how to achieve that, or which plugin I could use?

    Jeroen January 17, 2017 at 10:10 pm


    You could use my Advanced Shipping plugin. With a custom condition extension script you can setup the condition for the quantity of a certain product -> allowing you to setup a free shipping rate.

    Hope that fits your scenario / helps.


    Leave a Reply