WooCommerce category discount: 20 percent off a whole category, variations included

You set up a WooCommerce category discount by giving every product in that category a sale price. Bulk edit lowers simple products all at once, using the regular price decreased by a percentage. Variations of variable products need lowering separately, in the product or with a CSV file. A coupon restricted to the category gives a discount that shows only in the cart.

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

Which method should you choose?

Before you start, decide whether the customer should see a struck-through price already in the product list, or whether the discount should only apply after entering a code.

MethodWhat the customer seesVariationsEnd date
Bulk edit of the sale pricea struck-through price in the list and on the product pageno, simple products onlycan't be set in bulk edit
Variation prices in a variable producta struck-through price after choosing a variationyes, product by productyes, in the variation settings
CSV importa struck-through priceyes, each variation separatelyyes, in the date columns
Coupon restricted to the categorythe discount only in the cartyesyes, the coupon expiry date
The chat in TellMyShop Proa struck-through priceyesyes, with a start and end date

How to plan the start and end so the promotion switches itself off is covered in the post on the WooCommerce sale schedule. Coupons restricted to a category are described in the post on WooCommerce discount codes. Here we focus on setting the discount itself for all products in a category.

How to set a category discount step by step

Simple products first, then variations.

  1. Export the category's products with regular and sale prices. That is your copy if something goes wrong.
  2. Go to Products > All Products and filter the list by category. If there are more products than fit on a page, increase the number shown in Screen Options.
  3. Select all the products and choose Edit from the bulk actions.
  4. In the sale price field, choose the option to set the regular price decreased by a fixed amount or percentage, and enter, for example, 20%.
  5. Save and look through the list. Simple products now have a struck-through price. Variable products are unchanged.
  6. Open each variable product, go to the variations and set sale prices with the action for all variations. That is also where you set the sale dates.
  7. Finally open the category in the store as a customer and check a few products, including a variable one.

How the sale price fields and their dates work in the product editor is described in the documentation on product editor settings. The actions for all variations at once are covered under variable products.

Where a category discount most often falls apart

In a category with a few products you see everything at once. With several dozen, three things are easy to miss.

Variable products. Bulk edit does not lower them, and they are usually the best-selling products with sizes and colours. The customer then sees a “20% off” category in which their T-shirt costs the same as yesterday.

Products in several categories. The filter shows all products assigned to the category, including those that are in it as an extra. Sometimes a product that was meant to stay at full price gets the discount.

Rounding. 20% off €79.99 gives €63.992. WooCommerce rounds the displayed price, but the price in the database may have more decimal places. If you want neat prices, enter them instead of a percentage.

Remember the information duty as well. With every announced discount you must show the lowest price from the 30 days before it. The rule comes from the EU Omnibus Directive (Directive 2019/2161). Practical examples of labelling discounts were collected by the Polish agency PARP in an article on how to label price reductions correctly (in Polish). WooCommerce does not calculate this price by itself, you need a plugin for it. TellMyShop does not calculate it either.

How to choose the size of a category discount

Start with the margin, not a round number. 20% off a category where some products have a low margin can mean selling below cost. Go through the category and leave out products where a discount makes no sense, or give them a smaller one.

The second thing is the goal. A promotion meant to clear the last items can cover only products with low stock. A promotion meant to bring in new customers works better on products that already sell well. Write the goal down before the start, because after the sale only the goal tells you whether it worked.

How the chat sets a discount on a whole category

The TellMyShop plugin for WordPress and WooCommerce connects your store to your chat (Claude or ChatGPT). In TellMyShop Pro the chat sets sale prices for all products in a category, variations included, with a start and end date. It does this once the Sales switch is on in the plugin panel. The switch covers prices, promotions, discount codes, stock, variations and shipping, and stays on until you turn it off. Without it, the chat prepares a preview, but saving will not work.

With a large category the chat first checks whether the work fits within the hourly limits set in the panel, then shows a preview with the number of products and examples.

You: Give 20% off the Hoodies category from Friday 00:00 to Sunday 23:59. Round prices to .99.

Your chat: The Hoodies category has 18 products, including 6 variable ones with 31 variations. 2 products already have their own sale price, I'm leaving them as they are unless you say otherwise. Preview, examples:

In total 16 products and 31 variations. I don't calculate the lowest price from the last 30 days, check it in your plugin. Save? (yes / no)

You: Yes.

Your chat: Saved. The sale will start on Friday and end by itself on Sunday.

Card status: waiting for your “yes”
change preview

Zip Basic hoodie, size M

old version: price €199.00, no sale

new version: sale price €159.99, Friday to Sunday

Oversize Grey hoodie

old version: price €249.00, no sale

new version: sale price €199.99, Friday to Sunday

Illustration: products, numbers and replies are examples.

The values in the conversation are illustrative, and the prices include VAT. Every change goes into the change history, and you can undo the whole operation with one request, also with a preview. You can undo most changes this way.

In the free TellMyShop Free the chat saves nothing, but shows which products in the category are already on sale and which sell best. That is a good starting point for deciding whether a discount on a whole category makes sense at all. For a bigger campaign, the plan from the post on Black Friday in WooCommerce will help.

Start with the free TellMyShop Free. Read more about the plugin on the TellMyShop for WordPress and WooCommerce page, and Pro prices are on the pricing page.

Questions and answers

Does WooCommerce have a built-in category discount?

There is no single field for a discount on a whole category. The sale price is set on each product and each variation. You can lower many simple products at once with bulk edit, and variations in the variable product's settings or with a CSV file.

How do I discount all products in WooCommerce?

The simplest way is to set a sale price for the whole catalogue the same way as for one category, just without the category filter. The second route is a percentage coupon with no product restrictions. A coupon only works in the cart, though, so the customer does not see a struck-through price on the product page.

How is a sale price different from a category coupon?

A sale price shows straight away on the product page and product list as a struck-through price. A coupon restricted to a category only lowers the price after the code is entered in the cart. A sale price draws more attention, a coupon suits a chosen group of customers better.

Why didn't some products in the category get the discount?

Most often they are variable products, because bulk edit does not change variation prices. Other reasons are products in several categories, filtered differently than you think, or products that already had their own sale price. After the change, check the category's product list sorted by price.

Do I have to show the lowest price from the last 30 days with a category sale?

Yes, when you announce a discount you must give the lowest price from the 30 days before it. WooCommerce does not calculate this by itself, you need a plugin for it. TellMyShop does not calculate or display this price either.

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