WooCommerce Per Product Shipping Price Without Needing Extension or Plugin

Please note the commenter that pointed out a flaw in this if you have products with different shipping methods: 

The problem with this, is if you also have weight based shipping selected, and only want specific pricing for a handful of products, and someone selects one of those products AND a product which is included in weight based shipping, the customer is given two options for shipping, the flat rate (cheaper) and the weight based (more expensive). -Adam Winchester

I’m a big fan of WooCommerce, seriously.  I hate how much they nickel and dime for small features like this though.  It’s easier for me to move past it because I’m able to do a lot of tweaking in the code with hooks to get what I need done thereby saving a few dollars.  But sometimes, like this example, you can do it with no coding at all.

The shipping system in general can be pretty confusing so I’m going to walk you through how you can have custom, flat rate shipping prices for different products.

Shipping Zones & Methods

Under WooCommerce Settings click the Shipping tab.  Here you need to add a new zone.  For my example I call it US Flat Rate with a Flat Rate shipping method.

Now the confusing interface part.  In order to set details for flat rate you need to click on the words “Flat Rate” in your newly saved Shipping Zone row.  Let’s not do that yet though, click over to “Shipping Classes” option on this page.

Shipping Classes

This is where we will create our per item shipping prices.  Let’s say we have three products: T-Shirt, Mug and Hat.  We are going to create three shipping classes.

t-shirt-row

Now repeat for the other two items.

Back to Shipping Zones

Bounce back over to shipping zones, click on the “Flat Rate” link on your new shipping class row and let’s do some pricing.

Set the main cost to $0.00 then for each shipping class add the price for that item.  It’s that simple.  Go to your T-Shirt product and under shipping select the T-Shirt class.  Now it will  have that flat price added to the product for shipping on checkout.

23 thoughts on “WooCommerce Per Product Shipping Price Without Needing Extension or Plugin”

  1. The problem with this, is if you also have weight based shipping selected, and only want specific pricing for a handful of products, and someone selects one of those products AND a product which is included in weight based shipping, the customer is given two options for shipping, the flat rate (cheaper) and the weight based (more expensive).

  2. This sounds like a good solution, but what if you have 2 options for shipping for each product: Airmail and DHL. And to make it simple say Airmail is $20 per item and DHL is $50 per item. How can I best setup a way to have the shipping of each item be cumulative at the checkout?
    I’ve also gone and got the extra Woocommerce plugin Per Product Shipping, and I still can’t work out how to do this! https://docs.woocommerce.com/document/per-product-shipping
    Thanks for your help

  3. Hey Chris,

    In case if you need not to write code for the same. You can try one better plugin for all your shipping related issues. Woocommerce allows only one flat rate shipping method by default. Advanced Flat Rate Shipping Method For Woocommerce plugin allows you to create multiple custom Extra flat rate shipping methods, including free shipping for WooCommerce. Also, you can create shipping methods which will be available at specific conditions.
    https://store.multidots.com/advanced-flat-rate-shipping-method-for-woocommerce

  4. Thanks a million! this worked very well for me.
    I also felt like it’s a bit much to charge for such a small feature and was preparing myself to do some code work. I prefer this to whatever I’d have written, less breakable and still very intuitive for my users.

  5. Hi,

    Many thanks for this. It works for me exactly as described. One issue is if someone buys 2 or more items from the same shipping class then they only pay one shipping fee. Although I don’t necessarily want them to pay 2 or 3 times the shipping fee it usually is more. Is there any way to increase the shipping fee in this case?

  6. I have several shipping classes saved in a method called ‘Delivery’. All work fine apart from the ‘free shipping’ option.

    As the cost of free shipping is set to ‘0’ it doesn’t seem to recognise the value. So when I go to the checkout on a product that has free shipping, instead of say Shipping: £0.00 it instead displays the Method title, so it reads ‘Shipping: Delivery’ – which looks a bit rubbish. Is there any way I can make it display £0.00?

  7. I have UPS & USPS Shipping methods, but I want to apply each method to a specific product category, such that when one checkouts only the respective shipping method for that particular category is set. If there are two different products from different categories then both UPS & USPS appear on checkout. How can i go about this? Thank you

    1. I too use the UPS & USPS Shipping methods. Awoke to a rude awakening this morning that there is no longer a suitable option.

      1. @Justin @Munaye I feel, by creating two shipping classes for both types of products (UPS and USPS) you can display shipping rates for both these types of products.
        You would require WooCommerce Multi-Carrier Shipping plugin (https://www.pluginhive.com/product/multi-carrier-shipping-plugin-for-woocommerce/) where you can set shipping carriers like UPS and USPS based on shipping classes, weight, quantity, etc. The plugin provides live shipping rates for UPS, FedEx, USPS, Stamps, and DHL.

  8. I’ve tried this, but I’m not sure that it’s working for me – or I may be misinterpreting the function. I have four proucts with flat rate shipping going to three different zones. Each product is shipped in its own box – therefore the flat rate shipping needs to be applied for each individual product added to the cart. Four items = four flat rate shipping charges added.

    Is this what this tutorial addresses? I’ve added four classes for my four products and then configured that flat rate shipping as you’ve outlined above, but the cart still only calculates one flat rate shipping charge. I appreciatae you shareing tutorial.

  9. The problem we are having is Woo is defaulting to ‘per item’ shipping. The customer buys 2 products and gets charged freight on each item.

    In the latest Woo there is no option for ‘Cumulative’ freight.

    Having entered weights and sizes, the freight should be cumulative.

    The NZPost plugin does this.

    Any cures?

  10. Chris, I created 20 flat rate shipping rates in my Woocommerace site form your article (not per product) as such:”Flat Rate Shipping 0″ shipping class cost $0
    “Flat Rate Shipping 1 ” shipping class cost $1.95
    “Flat Rate Shipping 2” shipping class cost $2.95 etc.
    Then I went to each product (I have over 200 products on my site) to edit the shipping cost and chose the Flat Rate number that matched the cost from # 1 to 20 that appeared on the drop down in the product edit and saved it for that product.
    When I ordered the product to test it and added it to the cart to check out there appeared “Flat Rate” for the shipping charge but no price for shipping that was added to the total price at check out.
    Can you advise. Thanks, Mike Ciriello

  11. Chris, thanks for this. Just a question, when I set N/A to a shipping class on particular shipping method, the method still appear. How to solve this?

  12. Thanks for the post Chris. The only problem I had was when I had products of different sizes that have different costs to ship. For example a Large Bicycle and a Medium Bicycle because using your technique above it only reverts to the flat rate shipping for the bicycle.

Leave a Reply

Your email address will not be published.