Lets face it, taxes are not fun to deal with, let alone configure in your WooCommerce store. In this guide I’ll guide you through setting up taxes for shipping cost in WooCommerce. What I won’t be doing is providing the taxes you’ll need to setup, all the data is fictional and you should check with your local government to see what kind of shipping taxes should be charged.

Setting up shipping taxes in WooCommerce

There are two basic settings that need to be configured in order to successfully charge shipping taxes in WooCommerce. Aside from those two there are others to fine-tune it, but the most important ones are;

1. Taxable status on shipping rates

When using the ‘Flat rate’ option in the WooCommerce Core shipping options there will be a ‘Tax status’ option available to set. Make sure this is set to ‘Taxable’.

If you’re using my Advanced Shipping plugin there is a similar setting available in the shipping settings section.

2. ‘Shipping’ checkbox at tax rates

This is the one that is mostly overlooked. The taxes for shipping is not always the same as the rest of the order, which is why tax rates aren’t applied automatically on shipping rates. You’ll need to specifically check the box in the ‘Shipping’ box in the Tax rates settings.

 

Make sure to check it in the correct section of the different taxes rates (standard, reduced, etc) according to your local rules.

If you need to compound taxes, be sure to set different priorities for each row, WooCommerce only takes one tax rate per priority, so when you have it set to ‘Compound’ and both have the priority ‘1’ it will only that the first one it finds.

Shipping tax class

The next setting to take a look at is the ‘Shipping tax class’. By default this is set to “Shipping tax class based on cart items”. You can also select any of the other tax rates if wanted. Using the default “based on cart items” setting it will charge the highest tax rate when there are multiple products in the cart with different tax rates.

In a very edge case I’ve seen only a few times it may not suffice to charge the highest tax rate for different products. In that case there is a way around to charging different taxes for different products, but this only works if you calculate the shipping per product / shipping class / category for example. This workaround includes splitting the cart into two (or more) packages which each will have its own shipping cost and taxes calculated. I’ll be posting more about this edge case in a future blog post, and link it here when available.

How shipping taxes work

There is one important thing to know about the shipping taxes and the tax settings in WooCommerce. In the screenshot above you see the first setting which allows you to configure how you will enter the prices in your store ‘Prices entered with tax’. Here you can configure if the prices you’re entered in your store are already including taxes and if the taxes should be back-calculated, or if the tax rates should be added onto the prices.

The big difference with shipping cost is that these prices are always considered as ‘excluding taxes’. This can cause a bit of confusion, especially if you’re used doing things the other way around.

If you need to set one tax rate for all shipping and you don’t want to bother with configuring this within all the other tax rules, which can be a pain, there is a good solution. You can create your own tax classes, enter your own ‘shipping tax rate’ (now save) and set the ‘Shipping tax class’ setting to the newly created ‘shipping tax rate’.

A new section for the ‘Shipping tax rate’ will appear at the top of the page and you’ll be able to setup the shipping taxes rate for all shipping options without affecting products.

 

I hope you’ve found this blog post helpful (if so, a comment would be appreciated :-). For questions you can find me in the comments section, I’ll try to answer all questions.

  • 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 “A guide to shipping taxes in WooCommerce

    Allard January 24, 2018 at 12:58 pm

    Hi Jeroen,

    For our website we have products with different tax Rates. We have a high (Standard) rate of 21% and a low tax rate of 6%.

    We have a standard rate for our shipping cost of €2,95. Here we have to calculate tax rates over our shipping costs.

    If i only fill in the standard rate as €2,438 the high rate products have a shipping cost of €2,95, but the low rate shipping cost become €2,59 because it uses the 6% tax rate on €2,438

    If i add 2 shippings classes like “Tax high” and “Tax low” with Tax high = €2,438 and Tax low = 2,783 and delete the standard rate of €2,438 shippings costs become €3,36 if a high and low tax product are combined in the shoppingbag. In this case WooCommerce should only use the most expensive shipping class. And it does because the back-end price is exclusive Taxes. But it uses the Tax rate of the high tax product on the shipping class for low tax products.

    Can anyone help me on fixing this problem?

    The situation i need is that shipping costs are always €2,95. In the back-end it should do this:

    €2,438 for high tax products and use 21% Tax rate
    € 2,783 for low tax products and use 6% Tax rate
    €2,438 if high and low tax products are combined and use 21% Tax rate

    Thank you in advance

    PS. I’m dutch to, respond in the language you prefere

    Jeroen January 25, 2018 at 10:10 am

    Thats a tricky situation Allard!

    A quick thing that comes to mind is to use my Advanced Shipping plugin, and then create a custom condition to setup shipping rates based on the tax classes that are(n’t) in the cart.

    That way you should be able to resolve your situation.

    Allard January 25, 2018 at 11:42 am

    Hi Jeroen,

    Thank you for your reply. We’ll be looking in to that solution.

    With kind regards,

    Allard

    CGC February 2, 2018 at 1:28 pm

    Hi Jeroen,

    I have to fix a tricky issue and I’d want to know if your plugin would help me doing it :

    My Woocommerce shop sells books / audio CDs in Quebec (Canada) and I have to manage 2 different taxes on each product and its shipping costs.
    Both taxes are:
    • GST of 5% to be calculated on products total amount taxes excl. (but including shipping cost)
    • QST of 9.975% which must be calculated ONLY on shipping cost amount and NOT on products total amount (because of a QST tax exoneration on print book). So this is a special taxe case working only in Québec

    So to be accurate, here’s the calculation formula for Book in Québec :

    product sales amount (taxe excl.) 20
    shipping cost 6,7
    SUBTOTAL 26,7
    GST 5% on book & shipping 1,34
    TVQ 9,975% Only on shipping 0,67
    TOTAL 28,70

    As far as I know, Woocommerce allows you to calculate this both taxes, either on products total amount (including shipping cost) or on products total amount (excluding shipping cost) BUT it cannot do it ONLY on shipping costs ! that’s the point !

    So, could you help me to find a solution ?

    TIA

    CGC

    Jeroen February 2, 2018 at 7:18 pm

    Hi,

    I haven’t really gone deep into this to check what is/isn’t possible within shipping, but a quick thing that comes to mind is that you may be able to use fees instead of shipping. Fees can have its own tax rates so that may work in your scenario. Advanced Fees is a plugin of mine that allows you to setup fees with a specific tax rate.

    CGC February 3, 2018 at 12:00 am

    Hi Jeroen,

    Thank you for your prompt reply and idea that sounds good. ; )

    First of fall, can we test your idea with a trial ?

    I understand that a fee in your plugin could be a percentage of cart subtotal or product price, but could it be a percentage (9,975%) of shipping cost (product price excl.) ? This special behavior corresponds in fact to a tax exemption.

    Secondly, I need to display this « fee » under the first tax in cart and pdf invoice as it was a second tax) , while displaying the text : TVQ 9,975% :

    CART and INVOICE : e.g.

    X product amount (taxe excl.) 20,00
    shipping cost (taxe excl.) 6,70
    SUBTOTAL 26,70
    1st tax : GST 5% 1,34 (calculated on products + shipping total)
    2nd tax : TVQ 9,975% 0,67 (Your fee calculated only on shipping cost)
    TOTAL (taxes incl. ) 28,70

    Thirdly, the use of such a fee should be ONLY for one region of Canada (Québec) because all the other treeritories (7 others regions of Canada + 12 european countries including France and some others) should continue to use the usual taxes woocommerce system.

    So, do you really think your plugin could perform all these conditions?

    Thanks for advising

    ; )

    CGC

    Jeroen February 5, 2018 at 9:12 am

    Hi,

    There’s no trial available, you can view how it looks in the screenshots. If you assign the tax to it shows within the tax sections, but I can’t determine the order they’re shown in.

    The percentage is based on the total, but if you have a flat rate shipping you know how much the fee should cost. If its more dynamic you can also try and make a small code snippet to change the subtotal percentage to a shipping cost percentage, but I’m also not 100% positive that is available at that point of calculation within the cart (could make de code snippet a bit more elaborate).

    You can setup the fee to only apply when shipping state is to Quebec (or any other of the locational conditions).

    Cheers,
    Jeroen

    CGC February 3, 2018 at 2:35 pm

    sorry, I forgot to speak about the fourth condition to fullfill : to benefit of the same kind of reporting (woocommerce reports & csv exports) for this fee than for all the other taxes. ; )

    Thanks for your expertise : )

    CGC

    CGC February 6, 2018 at 11:01 am

    Hi Jeroen,
    Thanx for ur kind reply
    As you said, the main point is to make a code snippet to change the calculation basis from total percentage to shipping cost percentage.
    If we try this, where should we do it ? in some datafields in your plugin setup or directly in yiour plugin php templates?
    if yes, what are the concerned template(s)?
    thanx for all
    CGC

    Leave a Reply