Type something to search...
How to Configure Tax Settings in WooCommerce?

How to Configure Tax Settings in WooCommerce?

Tax is the part of WooCommerce setup people put off the longest, but getting it wrong means either overcharging customers at checkout or underpaying what you actually owe come filing time. WooCommerce's tax system is genuinely flexible, standard, reduced, and zero-rate tax classes, per-country and per-state rate tables, and the option to price products inclusive or exclusive of tax, but none of it is enabled by default, and none of it substitutes for actual tax advice specific to where you operate.

This guide covers enabling and configuring WooCommerce's tax settings, building rate tables for different regions, understanding tax classes and when you need more than the three defaults, and registering a fully custom tax class in code for cases the settings screen doesn't cover. As with any tax-related setup, treat this as a technical walkthrough, not legal or accounting advice; confirm your actual obligations with a tax professional or your local tax authority.

Step 1: Enable Taxes

Go to WooCommerce → Settings → General and check Enable tax rates and calculations. Saving this adds a new Tax tab to the Settings screen, where everything else in this guide happens.

Step 2: Configure Tax Options

Under WooCommerce → Settings → Tax → Tax options:

  • Prices entered with tax — decide whether the prices you type into products already include tax, or whether tax should be calculated and added on top at checkout. This single setting affects every product in your catalog, so decide it before entering prices in bulk, changing it later means re-checking every product's displayed price.
  • Calculate tax based on — Customer shipping address, customer billing address, or your store's base address. Shipping address is the standard choice for most stores, since it generally reflects where the sale is legally deemed to occur.
  • Shipping tax class — whether shipping itself is taxed, and if so, at which class's rate (commonly "Shipping tax class based on cart items").
  • Rounding and Additional tax classes — rounding controls whether tax is rounded per line item or at the subtotal; additional tax classes is where you list any tax classes beyond the three defaults (Standard, Reduced rate, Zero rate).
  • Display prices in the shop / during cart and checkout — whether customers see prices including or excluding tax, and the accompanying "price display suffix" (e.g., "$10.00 (ex. tax)").

Step 3: Build Your Rate Tables

Each tax class gets its own sub-tab (Standard rates, Reduced rate rates, Zero rate rates) with a spreadsheet-style table. Click Insert row to add a rate:

  • Country code / State code — leave blank to apply to all countries or states; use a specific code (e.g., US / CA for California) to scope a rate narrowly.
  • Postcode and City — further narrow a rate to a specific local jurisdiction, useful for city-level sales tax.
  • Rate % — the actual percentage applied.
  • Tax name — what shows on the customer's invoice (e.g., "VAT" or "Sales Tax").
  • Shipping — a checkbox for whether this specific rate also applies to the shipping cost, which interacts with the shipping tax class setting from Step 2.

WooCommerce evaluates rates similarly to how it evaluates shipping zones: more specific rows (matching postcode and city) take priority over broader ones (a whole country with no state specified), so build from broad country-level defaults first and add narrower overrides only where a specific state or city genuinely has a different rate.

Step 4: Assign Tax Classes to Products

By default every product uses the Standard tax class. To apply a different rate, for example, groceries or children's clothing that qualify for a reduced or zero rate in many jurisdictions, open the product, go to the General tab, and change Tax class in the dropdown. WooCommerce will then look up that product's tax against the matching rate table (Reduced rate rates, Zero rate rates) instead of Standard rates.

Step 5: Register a Custom Tax Class in Code

The three default tax classes cover most stores, but if your business needs a class the admin's "Additional tax classes" textarea can't cleanly express, or you want a tax class assigned automatically based on product data rather than manually per product, you can hook into WooCommerce's real, documented tax filters. Add this to a site-specific plugin:

// Add a custom tax class alongside Standard / Reduced rate / Zero rate.
add_filter( 'woocommerce_tax_classes', function ( $tax_classes ) {
    $tax_classes[] = 'Digital Goods';
    return $tax_classes;
} );

// Automatically assign the Digital Goods tax class to any product
// tagged with the "digital-goods" product tag, instead of relying
// on it being set manually every time.
add_filter( 'woocommerce_product_get_tax_class', function ( $tax_class, $product ) {
    if ( has_term( 'digital-goods', 'product_tag', $product->get_id() ) ) {
        return 'digital-goods';
    }

    return $tax_class;
}, 10, 2 );

A few details worth understanding here:

  • woocommerce_tax_classes just appends a new entry to the list of tax classes; after adding it, you still need to save an empty rate table for it under Settings → Tax (it will appear as its own sub-tab once the filter runs), or add specific rates if it should be taxed differently than zero.
  • woocommerce_product_get_tax_class overrides the tax class returned for a product at runtime, letting you assign it based on any logic you want (a tag, a category, a custom field) rather than requiring a store manager to set it by hand on every relevant product.
  • This kind of override is easy to get wrong silently. Always test with a real cart containing both an affected and an unaffected product, and confirm the tax line at checkout reflects the correct rate for each.

A Note on Multi-State and International Tax Compliance

For stores selling into many U.S. states or multiple countries, manually maintained rate tables become a real liability once you cross economic nexus thresholds in additional states, or need to handle EU VAT/OSS rules. At that point, most stores integrate a dedicated tax service (like TaxJar or Avalara, both of which offer official WooCommerce extensions) that calculates and files taxes automatically, rather than expanding the manual rate tables indefinitely. This is a genuine legal compliance question, not just a technical one, so involve an accountant before scaling into new tax jurisdictions.

Frequently Asked Questions (FAQ) About WooCommerce Tax Settings

Check that Enable tax rates and calculations is checked under WooCommerce → Settings → General first; this master switch has to be on before any tax tab or rate table has any effect. After that, confirm a matching rate row actually exists for the customer's country or state in the relevant tax class's rate table.

Tax-inclusive pricing means the price you type into a product already contains tax, and WooCommerce backs it out for reporting; tax-exclusive means the price is added to tax on top at checkout. This is set once for the whole store under Prices entered with tax, and switching it after entering your full catalog means re-verifying every displayed price.

Most jurisdictions base sales tax on where goods are delivered, making shipping address the more common and generally safer default, but this varies by region and product type, so confirm with a tax professional rather than assuming shipping address is universally correct for your situation.

In many jurisdictions, yes, digital goods and services can carry different tax treatment (including VAT/OSS obligations across the EU), which is exactly the kind of case where a custom tax class, like the Digital Goods example above, or a dedicated tax compliance extension becomes worth setting up.

Yes, add a separate row per state code within the same tax class's rate table, leaving the country code consistent but specifying different State codes and Rate % values for each.

No, WooCommerce only calculates and displays tax at checkout and records it on each order; filing and remitting collected tax to the relevant authorities is a separate obligation you (or a service like TaxJar or Avalara) handle outside WooCommerce.

New or changed rates only apply to orders placed after the change; WooCommerce doesn't retroactively recalculate tax on existing completed or processing orders, so a rate correction never silently alters historical order totals or reports.

Conclusion

WooCommerce's tax system is capable enough to handle everything from a single flat-rate state to a multi-jurisdiction catalog with reduced and zero rates for specific product types, but every bit of that capability depends on the rate tables actually being filled in correctly and matched to the right products. Start with Enable tax rates and calculations, decide your inclusive/exclusive pricing approach before entering products in bulk, and build rate tables from broad to specific.

For anything past manually maintained rate tables, whether that's a custom tax class tied to product data, as shown above, or a dedicated compliance service once you're selling across many states or countries, treat WooCommerce's filters as the extension point and a tax professional as the actual source of truth on what you owe.

Tax and shipping are usually configured back to back since both run automatically at checkout; if you haven't set up your shipping zones yet, that's the natural companion guide to this one.

Tags :
Share :

Related Posts

Effortlessly Crafting Compelling WordPress Pages

Effortlessly Crafting Compelling WordPress Pages

As a website owner or content creator, having the ability to seamlessly add new pages to your WordPress site is crucial. Whether you're introducing a

Continue Reading
High Traffic Tips for WordPress Mastery 🚥

High Traffic Tips for WordPress Mastery 🚥

In our digital age, where online visibility is paramount, ensuring your WordPress site can handle surging traffic is crucial. Just like a finely-tune

Continue Reading
How Do I Change the WordPress Login URL?

How Do I Change the WordPress Login URL?

By default, every WordPress site's login page lives at the same predictable address: yoursite.com/wp-login.php (which also happens to redirect from

Continue Reading