WooCommerce filters not working: four symptoms, four causes

WooCommerce filters not working is most often down to products having custom attributes, typed by hand into one product, instead of global ones. The second common cause is duplicate values, for example “Black” and “black”. Less often the filter plugin itself or its cache is to blame. Work out which of the four symptoms you see, and the cause usually becomes clear.

Author: The TellMyShop team. A guide for WordPress site and WooCommerce store owners: the cause, the manual fix and the same work in a chat conversation.
Last updated: · 6 min read

Where the filter gets its data

A store filter shows attribute values, meaning characteristics like colour, size or material. WooCommerce has two kinds of attributes, and they decide whether the filter sees anything at all.

Global attributeCustom attribute (product-specific)
Where it is createdProducts, Attributeson one product's page, Attributes tab
Valuesone shared list for the whole storetyped by hand, only in that product
Seen by the filteryesusually not
Risk of typoslow, you pick from a listhigh, every entry from scratch
For variationsyesyes, but without filtering

The WooCommerce documentation on categories, tags and attributes explains that attributes are used to filter products and build variations. The documentation for the attribute filter block in the search extension says it even more clearly: the attribute filter block only supports global attributes.

Symptom 1: the filter shows no products

A customer clicks “Red” and sees an empty list, even though the store has red products.

Cause: the red products have their colour entered as a custom attribute or in the description, not as a term of a global attribute. The filter looks for products assigned to the term “Red” in the global list and finds none.

Check the Attributes tab on one of those products. A global attribute has a name from the list and terms chosen from a dropdown. A custom one has a text field with values separated by a vertical bar.

Symptom 2: a value or a whole attribute is missing from the filter

You have five colours, and the filter shows three. Or there is no size filter at all.

There are usually three causes. Some products have a custom attribute instead of a global one. The term exists in the list, but no published, in-stock product has it, so the filter hides it. Or the filter block was set to one attribute only. In block themes you set up filter blocks under Appearance, Editor, in the catalogue template, and the product filters block documentation describes how they work.

Symptom 3: the same values appear twice

The filter shows “Black”, “black” and “Blck”. Or “XL” and “xl”. Each one leads to a different set of products.

Cause: imports from several files, or adding values by hand. To WooCommerce these are separate terms. The fix is to choose one, assign all the products to it, and only then delete the empty one. The order matters, because deleting a term that still has products detaches it from them.

A CSV import also makes it easy to create a custom attribute instead of a global one. Barn2's guide to importing attributes explains how to avoid that.

Symptom 4: the filter shows wrong or stale results

The filter shows a product it shouldn't, a sold-out size, or the state from a few days ago.

The causes are technical:

  • the cache of a caching plugin or of the filter plugin itself,
  • the WooCommerce attribute lookup table, which can fall behind after an import; in newer versions you regenerate it under WooCommerce, Status, Tools,
  • a filter plugin that looks at the product's attributes rather than the stock of a specific variation,
  • a conflict between two filter plugins, or between a filter plugin and a search plugin.

Here the filter plugin's settings and documentation decide. The Themeisle overview also covers the built-in filter blocks and their limits.

An attribute for filters, for the description or for variations

Each attribute on the product page has two checkboxes, and both affect what the customer sees.

“Visible on the product page” shows the attribute in the additional information tab. It doesn't affect the filter, but it helps customers compare products.

“Used for variations” makes the attribute the basis for variations, for example hoodie sizes. Such an attribute can still work in the filter if it is global. But then the filter and stock start to depend on each other: a product with a sold-out XL may appear when XL is selected, depending on the filter plugin.

A good rule: keep the characteristics customers choose products by, such as colour, size, material or brand, as global attributes. Descriptive details that apply to one product can stay custom or go into the description. Leave categories and tags for groups of products, not for colours and sizes.

How to tidy attributes step by step

An order that protects you from losing data:

  1. List the global attributes under Products, Attributes, with their terms.
  2. Find products with custom attributes that should be global.
  3. Find duplicate terms and choose which one stays.
  4. Assign products to the correct global terms, starting with one category.
  5. Check the filter on that category in a private browser window.
  6. Delete the empty duplicate terms.
  7. Clear the cache and check the filters in the other categories.

With a few products you can do this in the admin. With a few hundred, it means many evenings of opening products one by one.

How the chat helps

The TellMyShop plugin for WordPress and WooCommerce reads the list of attributes and their terms, and the product data, even in the free TellMyShop Free version. Your chat (Claude or ChatGPT) finds products with no attributes, with custom attributes instead of global ones, and with duplicate terms, and then prepares a clean-up plan.

In TellMyShop Pro the chat sets product attributes as soon as the licence is activated, with no switches, in batches of up to 50 products. Each batch has a preview, saving happens after your agreement, and the change history lets you undo most changes. A sample conversation, with example values:

You: The colour filter in the Jackets category shows only some of the products. Find out why.

Your chat: The Jackets category has 64 products. 41 have the global Colour attribute. 18 have their colour entered as a custom attribute, so the filter can't see them. 5 have no colour at all. On top of that, the Colour attribute has two terms, “Black” and “black”.

You: Move those 18 to the global attribute and merge the blacks.

Your chat: Preview of the first 2 of 18:

For 7 products with the term “black” I'll change it to “Black”. Five products have no colour: tell me the colours or I'll skip them. I'll save it after your ‘yes’.

Card status: waiting for your “yes”
change preview

Tatra down jacket

old version: Colour (custom): black

new version: Colour (global): Black

Gorce softshell jacket

old version: Colour (custom): navy

new version: Colour (global): Navy

Illustration: products, numbers and replies are examples.

The chat doesn't guess a colour or size from the name if it isn't sure. It collects missing data in a single question. It also doesn't fix the filter plugin or its settings. If the filter still shows wrong results after the attributes are tidied, the problem lies in the plugin itself, and you need to report it to its author or whoever looks after the site.

Good filters are half the work on a category. The post on WooCommerce category descriptions covers the other half. If customers use search instead of filters, see what to do when WooCommerce search doesn't find products. More about the plugin is on the TellMyShop for WordPress and WooCommerce page, prices are on the pricing page, and all the guides are on the blog.

Questions and answers

What is the difference between a global and a custom attribute in WooCommerce?

You create a global attribute once under Products, Attributes and choose its terms on many products. You type a custom attribute by hand in one product and it only exists there. Store filters work on global attributes and usually can't see custom ones.

Why does my filter show “Black” and “black” as two values?

Because they are two different attribute terms, usually after imports from two files or adding values by hand. The filter shows each one separately and customers see only some of the products. Assign the products to one term, then delete the other once it is empty.

The filter shows a size that is out of stock. Is that a bug?

It depends on the settings and the filter plugin. Some filters look at the product's attributes rather than the stock of a specific variation, so they show the product even when the chosen size is sold out. Check the filter plugin settings and the variation stock.

Will TellMyShop fix my filter plugin?

Not in this task. The chat checks and corrects the data filters work on: product attributes, their terms and gaps. The filter plugin's own settings, its look and any code errors stay with the plugin's author or whoever looks after the site.

How many products can the chat fix at once?

In TellMyShop Pro attributes are set in batches of up to 50 products. Before a bigger job the chat checks whether it fits within the hourly limits set in the plugin panel, and suggests stages if it doesn't.

WordPress is a trademark of the WordPress Foundation. WooCommerce is a trademark of Automattic Inc. Claude is a trademark of Anthropic PBC. ChatGPT and OpenAI are trademarks of OpenAI. TellMyShop is not affiliated with these companies.

TellMyShop for WordPress and WooCommerce

Your chat reads the site, shows every change before saving it and saves only after your yes. You can undo most changes with one sentence. Works with Claude or ChatGPT, free accounts included.

Read next