WooCommerce: How to Assign Free Shipping to a Single Product?

Believe it or not, the answer to this very frequent question is inside the WooCommerce settings… so don’t worry too much about coding if you’re not a developer!

From the WooCommerce shipping rates, you can select “Free Shipping” as a method but that would apply to ALL products – so how do you override the shipping settings and allow a single product to have free shipping?

1. Create a Shipping Class

From the WordPress dashboard, go to WooCommerce > Settings > Shipping > Shipping Classes > Add Shipping Class. Call it “Free Shipping” or whatever you like.

Defining a new shipping class in the WooCommerce settings

2. Assign the new Shipping Class to your Product

Edit the product that requires free shipping by going to Product Data > Shipping > Shipping Class and assigning the “Free Shipping” shipping class to it. Update the product (if you go back to the admin page WooCommerce > Settings > Shipping > Shipping Classes, you should now see a “1” under “Product Count”).

Assigning a shipping class to a WooCommerce product

3. Set up a Flat Rate based on Shipping Class

Go to WooCommerce > Settings > Shipping > Shipping Zones. In each zone you should have at least 1 Flat Rate. Edit each Flat Rate, and make sure:

  • Cost is $0
  • “Free Shipping” class cost is $0
  • “No shipping class” cost is whatever it would be for other products
  • “Charge per class” is enabled
How to set up a Flat Rate to enable per-product shipping

That’s it.

Now if the product is in the cart and you’ve set up things properly, shipping will be free for it alone  🙂

Rodolfo Melogli

Author, WooCommerce expert, WordCamp speaker and Internet marketer, Rodolfo Melogli has worked as a WooCommerce freelancer since 2011. He helps entrepreneurs and developers overcome their WooCommerce nightmares :) Rodolfo is the organiser of WordCamp Dublin, the Dublin WooCommerce Meetup, the Dublin Ecommerce Meetup and the Dublin WordPress Meetup. He enjoys interacting with people, travelling and chasing tennis & soccer balls. Of course, he loves pizza too.

12 thoughts on “WooCommerce: How to Assign Free Shipping to a Single Product?

  1. Hi, one question: what if “No shipping class” cost can not be one price but depends on shipping method?

    1. Hi Marek, thanks so much for your comment! Yes, this is possible – unfortunately this is custom work and I cannot provide a complementary solution here via the blog comments. Thanks a lot for your understanding! ~R

  2. Hi, I tried this method and I still can’t figure out what I am doing wrong. I noticed that it now shows up the customer can choose this free shipping option along with the other shipping cost options no matter what products are in the cart. not just the dedicated one

  3. Hi. The shipping class is still showing as an option even when I do not have the item in the cart. I can’t figure out what I am doing wrong.

    1. Hey Taylor, thanks for your comment! Did you follow the instructions @ point #3?

  4. Does this work with Variable products? For the life of me i can not get it to take?

    1. Of course Ryan, just apply the free shipping class to each single variation 🙂

  5. After hours of googling and trying everything under the sun to get this to work, including a free plugin that I found out later only gave free shipping to ALL the products in the cart ;p yours worked on the first go round! Not only did it work for free shipping on my charity item and not the other items, but it didn’t automatically add shipping to every item in the cart (instead of just the cart of items). Thank you! book marked in case I ever have to do this again.

    1. Awesome 🙂

  6. Hi

    I am using the Table Rates Shipping plugin. Can I use this to designate one product for free shipping?
    I am trying to complete the setup of my store as I open in a few days and am panicking a bit.

    WooCommerce support has been great but this is a detail I’m having trouble with.

    I will really appreciate your help here.

    1. Hello Marilyh, if you use that plugin you won’t need this snippet, you can achieve that from its settings 🙂

Questions? Feedback? Support? Leave your Comment Now!
_____
If you are writing code, please wrap it between: [php]code_here[/php]. Failure to complying with this (as well as going off topic) will result in comment deletion. You should expect a reply in about a week - this is a popular blog but I need to get paid work done first. Please consider joining #BloomerArmada to ask me 1-to-1 WooCommerce questions. Thank you :)
¯¯¯¯¯

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.