Setting up WooCommerce Part 2 – Tax, Tax Classes and Price Display

WooCommerce tax classes

The first part of our tutorial series on WooCommerce dealt with all the General Options and Product Options. This section will describe how to correctly create Taxes and how to make use of the Tax Classes. The topic “Taxes” and Sales Tax is something not many online shop operators like dealing with. The topic is, however, of central importance as nobody would like to experience any nasty surprises with the tax office. You will definitely have to know about the various tax rates in WooCommerce if you are selling goods with a reduced sales tax rate (e.g. – in Germany – books, specific food types or some services), or if you deliver to foreign countries.

General Tax Options in WooCommerce

WooCommerce for WordPress offers a variety of options to satisfy all these different requirements. You will find these options in the WordPress backend at -> WooCommerce -> Settings -> Tax. The subsection Tax Options will be opened first:

Tax Options in WooCommerce
General Tax Options in WooCommerce
The following settings are available:
  • You will specify in Enable Taxes whether or not WooCommerce should deal with tax calculations. You won’t get around it if you are operating a commercial shop in Germany, Austria, or Switzerland. The only exception here is if the so-called “small business operator regulations” apply. Even then you will still have to observe some specific legal requirements. For more info have a look at our plugin WooCommerce German Market.
  • Prices Entered With Tax must then be selected to specify whether the gross price (incl. tax) or the net price (excl. tax) should be stated, when importing your products. WooCommerce will then calculate the associated price with or without tax. Generally, shops in the B2C environment (sales to private end customers) will use the setting “Yes, I will enter prices inclusive of tax”. Important: Pre-existing products will not be modified automatically if this setting is amended.
  • The option Calculate Tax Based On: specifies which address is to be used as basis for calculation of the automatically selected tax rate if an order from another country requires a different taxation (more on that later). The following options are available: “Customer Shipping Address”, “Customer Billing Address”, or “Shop Base Address”. In most cases, the customer shipping address will be used. You should discuss this point with your tax advisor, as a variety of different regulations may apply.
  • The Default Customer Address will be used if taxes are displayed in the shop before the potential buyer enters his address. In this case the option Shop Base Address should be selected (instead of No Address), to ensure that the legally required tax information is stated alongside your products. An automatic tax correction can be applied if the customer enters a foreign country as his address during the course of the order process.
  • The Shipping Tax Class specifies, whether the shipping costs will be taxed automatically in the shopping cart depending on the product tax rate (usual default setting), or if the default tax rate, a reduced rate, or no tax at all should be applied. The shipping costs will be taxed with the relevantly highest rate if the shopping cart contains products with differing tax rates and the option Shipping tax class based on cart items is selected.
  • Taxes will be calculated and rounded as needed for each position when the option Rounding is deactivated, and not only when calculating a subtotal in the cart (default setting).

Note: Our plugin WooCommerce German Market will implement some basic settings automatically during installation. These include – with regards to taxes – the options “Show prices and cart prices including tax”, “Show item total including tax”, and the setting for the currently valid tax rates (more on that later on). In this case, some of the options mentioned in this section have been preset to match.

Create New Tax Class

A tax class specifies, which of your products will be calculated with which tax rate. New classes with their own tax rates can be created using the menu item Additional Tax Classes. Simply add a new row with the name of the new class in the field Additional Tax Classes (Don’t forget to Save Changes):

Create Additional Tax Classes
This is where additional tax classes are created
These classes – in our example the newly created tax class “User-defined” – can then be assigned to an individual product via the selection box Tax Class during product creation:
Specifying a Tax Class in WooCommerce
Specifying the Tax Class
WooCommerce allows you to manage and assign tax classes individually. This will be very helpful – in particular for web shops with very different product types and/or target markets. Individual classes can be specified for “Exceptions”, which will then include regional tax rates. WooCommerce will then automatically calculate the correct tax rate combined with the tax class selected for the product, taking into account the delivery region.

At the time of installation, WooCommerce will automatically create two new tax classes: Reduced Rate (for example for the reduced rate sales tax of currently 7 percent in Germany) and Zero Rate (for non taxable products). The sub-settings for these tax classes can be edited via the relevant tab under the menu item Tax:

Tax Classes in WooCommerce
Pre-Defined Tax Classes
The tax classes newly defined by you will appear as a separate tab after saving (just like our “User-Defined Rate”).

Adding Custom Tax Rates to Tax Classes

The basic principle of the tax classes is easily understood when using the functions behind each of the tabs – as a look at Reduced Rates will demonstrate:

Tax Class Reduced Rate
Tax Rates for the Class “Reduced Rate”
You can add new tax rates broken down to country level – or even individual states in foreign countries, for post code areas or individual locations or special tax zones via the button Insert row. For the example Reduced Rate, these would therefore be additional reduced tax rates for various delivery regions.

In addition to the relevant tax rate and name, you can specify the following attributes:

  • Use Priority to specify which tax rate should be applied in overlapping regions. Here an example: The shipping address is in a post code region with tax rate A. The shipping city, however, which is located in the same post code region, has its own separate tax rate B. The higher priority setting (post code or city) will govern which tax rate will be applied.
  • Taxes with the attribute Compound will be calculated in addition to other applicable taxes (“On Top”).
  • The check box Shipping determines, whether the tax rate will also be applied to the shipping costs (this would generally be the case in Germany; please consult your tax advisor regarding deliveries to other countries).

Price Display in the Shop

Let’s finally have a look at all the other setting options below the Additional Tax Classes of the tab Tax Options:

Additional Tax Options
Additional Tax Options for Price Display in WooCommerce
These options define the way WooCommerce will handle price displays in your online shop:
  • You can control via Display prices in the shop whether or not the price will be shown Including tax or Excluding tax. (Please see the explanations regarding the menu point “Enable Taxes” at the top of the section.)
  • Price display suffix specifies whether a specific text should be shown after the price in your shop (e.g. the suffix “incl. VAT”).
  • Note: Our plugin WooCommerce German Market will do all the legal labeling of additional product information for you. This can be the tax component, or information about shipping costs and delivery times. We continuously adapt the relevant issues to the latest legal requirements. We therefore recommend not to amend the information provided there via the additional options in WooCommerce if you use the WooCommerce German Market plugin.  

  • The same applies for the WooCommerce option Display prices during cart/checkout.
  • Display tax totals specifies, whether the tax totals of all the individual tax rates should be listed separately in the order overview (“Itemized” is recommended for shops in Germany, Austria, and Switzerland) or as one total (“Summarized”).

The effects of the individual options are easy to demonstrate in a demo shop. Simply adjust the option settings, reload the relevant page in the demo shop, and you can clearly see the in some instances a bit abstract concepts. Remember to always do these tests in a test system and not in your live shop!

You have some questions or comments about some of the points in this section or about the setup of WooCommerce? Please use the comment function to leave us your feedback. (Please use the Support Forum for specific enquiries about our own plugins.)

Post Sharing

Author Avatar

Editor at MarketPress. Passionate blogger, corporate blog expert and book author (e.g. "Blog Boosting"). Co-organizer of WP Camp Berlin.

Also Interesting

slack-blog

New Plugin: Slack Connector - Connect WordPress, WooCommerce and Slack

by Michael Firnkes

Initially we merely wanted to optimize our own Slack-processes. With automated notifications from our MarkettPress shop, the blog and our forums. The resul ...

Read more
rolebasedprices-en

Role Based Prices for WooCommerce is available again: Different prices for different customer groups

by Michael Firnkes

You want different prices for different customers and users of your online shop? E.g. for subscribers or wholesaler? Or do you need bulk prices? A lot of o ...

Read more
woocommerce-review7

WooCommerce Weekly Review #7: Woo vs Magento, shop security and customer confidence

by Michael Firnkes

What is a WooCommerce shop in practice? And how do you protect it against external attacks? This and more in our Weekly Review. WooCommerce vs Magento: ...

Read more
woocommerce-review6

WooCommerce Weekly Review #6: Translations, WordCamp Switzerland & avoiding legal warnings

by Michael Firnkes

WooCommerce was a hot topic at WordCamp in Switzerland. Progress is being made with the system translations and there are lots of useful new extensions. Th ...

Read more

Comments

19 Comments

  1. #1

    Hi Michael – thx very much for this post which has been extremely useful. I had a question about taxes and pricing displays.

    I need to show most of the products in the store with prices including tax. However, if a user is logged in and a member of a customer group (e.g. ‘wholesalers’) I need to show only a specific category of products with prices on those specific product pages displayed excluding tax.

    The tax calculation will be presented to those users only at checkout.

    Any idea how I could achieve this?

    • #2

      @Paul I don’t think the scenario you’re describing can be achieved with WooCommerce core only. You’d need a solution to assign user roles to customers (I’m guessing you might already have a plugin installed to achieve that?), and then you need custom logic to modify tax display in dependency of certain categories. TL;DR: You need to hire a developer with good programming experience in both, WordPress and WooCommerce. 😉

  2. #3

    I have setup my tax configuration like you said. Check “Yes, Enter my price inclusive of tax”. However, the tax is still adding on top of the price at checkout.
    I have looked at other forums, and can’t find any solution to this. Any idea? Thanks for your help.

  3. #5

    Hello,
    We are a US based company that ships/sells to all states.
    I would like to collect taxes from customers in the state of Florida only.
    All other state order will not be charged tax.
    How do i accomplish this?
    Thanks!

    • #9

      Hi Nick,

      Did you figure this out because it is not working for me. I need to collect tax for Georgia residents only.

      Thanks!

      • #17
        Lauren Schroth

        Did you figure this out? I need to charge sales tax only if the following scenario examples are true:
        If billing and/or shipping to AZ, sales tax is charged.

        Scenario 1: Billing address is NY. Shipping address is AZ – charge sales tax
        Scenario 2: Billing address is AZ. Shipping address is Utah – no sales tax charged
        Scenario 3: Billing address is AZ. Shipping address is AZ – charge sales tax

  4. #6

    A very useful post, Thanks Michael

  5. #7

    I have setup the tax configuration to show all prices including tax (in the cart as well as checkout and everywhere else). I just have one issue: the option prices on the product page itself are displayed with tax included (like they should). However, in the cart and on the checkout page they are displayed without tax. How can I display them with tax included?

  6. #8

    Hi,

    While adding my products, the product prices were including the tax. But the tax defined was 0. Now the tax has been defined as 23%. How can it reflect on the existing products.

  7. #10

    Hi,
    I have to insert a fixed tax not as a percentage (%). I have insert a tax of 9 euro per product. Solution?

  8. #11

    Hi,

    I have setup all my products to show the pice incl. tax that is 25% in Denmark.
    But when a customer move over to Check-Out, the price only displays the total price. The tax in the brackets doesn’t calculate, it’s stay as zero tax.

    It worked fine on my test site, but not after I moved it to a new domain.

    Does anyone know how to fix this problem, is the something I have done wrong in my WP settings?

    It’s driving me crazy!

    • #12

      I have the same issue, been googling for hours now…! Driving me nuts. I also work with 25% tax as I´m Norwegian. Please let there be a simple solution for this, anyone?

    • #13

      I have the exact same problem for Belgium, I need to apply 21% tax for all EU countries and 0% tax for the rest of the world. I tried everything but it keeps showing tax 0€. A solution would be highly appreciated!

  9. #14

    Hi, Thanks a lot for the tutorial. i just had a query about the tax.

    Question 1 : I am from INDIA. here we have all different sort of taxes like,
    VAT + Sales tax + state wise tax (such as OCTROI).
    So we need the flexibility to include combination of these taxes product wise.

    Question 2: All these taxes to be applicable for the vendor / seller who supply the actual product. But when we show the selling price to the end user / product buyer customer, all these taxes should not to be shown to them as these will be part of final selling price displayed with the product.

    I thought of including all these different taxes in different classes(one on each). but i am not able to put more than one tax class in a product. so how do i add them?? plz help me..

  10. #15

    Hi
    Good explanations !!!
    But i’ve got a problem on my backend woocommerce when i look a commande i’ve my price display without VAT like that ;
    Item Price Quantity Total VAT

    I would like displaying the price and total with VAT include
    Is it possible ?

    Thanks

    Patrice

  11. #16

    Hi,

    I have a big issues which drives me crazy :-).
    I’m working with swiss taxes of 8%. I checked prices included taxes. This works perfectly : if I sale something for 100.- then it calculates (8.- of taxes).
    But my problem is with the shipping taxes. Actually if I have a shipping cost of 10.- it includes 0.80.- of taxes (we have the same taxes on shipment as on the products). But in the checkout menu then it writes : Shipping cost : 10.80.- (includes 0.88.- taxes).
    So at the end for my example I have a total of 110.80.- (includes 8.88.- taxes) (100.- + 10.80.-), but I should have a total of 110.- (includes 8.80.- taxes).
    Can someone explain me how I can fix that issue ????
    Thanks a lot.
    Fred

  12. #18

    hello
    how i can replace the text “Tax” by “VAT” after the total in the checkout page?

    thankyou

  13. #19

    I have followed your instructions how to set up sales tax for woocommerce. But my website is still showing $0 in the tax column. How can i fix this problem? Please help me. Thank you!

Leave a Reply

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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">