How to Put an Entire Product Category on Sale in WooCommerce (And Know Exactly What You’re Discounting)
WooCommerce Tips · Smart Cycle Discounts
Put Your Whole Catalog on Sale Without Losing Track of What You’re Discounting
Category-wide discounts are one of the most efficient promotions you can run — and one of the easiest to misconfigure. Here’s exactly how to set one up in Smart Cycle Discounts, understand which products it will hit, and combine it with exclusions so the scope stays intentional.
A category-wide discount is, on the surface, the simplest promotion you can configure. Pick a category, pick a discount, set a schedule, done. Everything in “Outdoor Furniture” goes 20% off. Every product in “Winter Jackets” gets a $15 reduction. No hunting for SKUs, no building product lists, no worrying about what you missed.
In practice, the simplicity cuts both ways. Category-scoped campaigns are efficient precisely because they include everything that matches the taxonomy query — and if your categories have accumulated products over time in ways you haven’t audited recently, “everything that matches” may include items you didn’t intend to discount. Before you run this type of campaign, it’s worth understanding exactly how the scope resolution works, not just trusting that it will do the right thing.
This guide explains how Smart Cycle Discounts actually builds the product set for a category-scoped campaign — pulled directly from the plugin code — along with how categories and tags interact, how to use exclusions to trim the scope, and what to expect with variable products. If you want the broader strategic picture of when to choose a category scope versus a specific product list, the companion post on discounting a WooCommerce product category covers that in depth. This guide is focused on the mechanics of setting one up correctly in SCD.
Why a category discount and when it fits
A category discount makes the most sense when your category genuinely represents a clean, intentional product set and you want to move all of them together. Clearance sections are the obvious case — you want every item in the “Clearance” category discounted, and you want new additions to automatically enter the sale when you assign them to that category. Seasonal collections work the same way: “Summer Essentials” goes on sale at the end of August, and the campaign covers the category, not a handpicked list you have to update each year.
A category discount also works well for promotional storytelling. “20% off all Kitchen Appliances this weekend” is a clean message that’s easy to communicate across email, social, and your storefront. Customers understand the scope intuitively, and you don’t have to explain which items are included.
Where it starts to break down is when the category isn’t as clean as it looks. If products are assigned to multiple categories for navigation or SEO reasons, a category-scoped campaign will include them wherever their taxonomy intersects with your target. This isn’t a plugin quirk — it’s how category queries work in WordPress. The multi-category overlap problem is worth reading about before you run a category campaign on a messy taxonomy. The short version: audit your category membership before you schedule the sale, not after a customer screenshots an unexpected discount.
How Smart Cycle Discounts resolves category scope
When you select “All Products” as your selection mode and assign one or more product categories, Smart Cycle Discounts runs a taxonomy query against WooCommerce’s product_cat taxonomy using the term IDs of the categories you selected. The query uses an IN operator by default — a product qualifies if it belongs to any of the selected categories.
This is the same pattern that WooCommerce uses internally when you browse category pages: products that are members of the category appear, regardless of what other categories they also belong to. Smart Cycle Discounts does not narrow the scope by parent-child category relationships — it queries the exact terms you selected. If you select “Jackets,” products in the “Jackets” term are included. Products in a sibling category like “Coats” are not included unless you also select that term.
Category selection is an OR match by default
When you select multiple categories — say, “Jackets” and “Hoodies” — SCD returns all products that are in at least one of those categories. A product that is in both qualifies once, not twice. The result is a deduplicated union of all qualifying product IDs.
The product selection result is cached for 15 minutes and cleared automatically when categories or tag assignments change (when products are added, edited, or moved between categories). This means if you add a product to a targeted category during an active campaign, that product will receive the discount after the cache refreshes — typically within 15 minutes without any manual action required.
The category query covers all published products. Draft, pending, and trashed products are excluded from the scope, as are products that have been deleted. If a product you expected to see in a category campaign isn’t getting the discount, check its publish status and its category assignments first.
Categories and tags: two taxonomies, one combined filter
Smart Cycle Discounts treats WooCommerce product categories (product_cat) and product tags (product_tag) as separate filter dimensions. You can use either, or both together.
When you select both categories and tags on a campaign, the plugin applies AND logic between them. This means a product must match the category filter and the tag filter to qualify. If you select the “Electronics” category and the “new-arrival” tag, only products that are simultaneously in the Electronics category and tagged as new arrivals will receive the discount.
Using tags to narrow a category sale
This AND logic is useful when your category is broad but you only want to discount a subset. If your “Clothing” category contains 200 products but you only want to discount last season’s inventory, tagging that inventory with something like “last-season” and combining it with the category filter narrows the scope without you having to build a manual product list.
Within each taxonomy, the logic remains OR — if you select three tags, a product qualifies if it has any of those three tags. So multiple categories with multiple tags gives you: (any of the selected categories) AND (any of the selected tags).
Tags are available for campaign targeting in the free version of Smart Cycle Discounts, the same as categories.
Excluding specific products from a category campaign
Once the category and tag filters resolve your product set, you can remove individual products from it using the exclusion list. This is the right tool when you have one or two items in a category that you need to keep at full price — a specific model that’s already on a supplier-mandated minimum advertised price, for example, or a product that you’re running a different campaign on.
The exclusion list accepts specific product IDs. Products on the list are filtered out of the campaign scope after the taxonomy query runs. This means the exclusion layer sits on top of the category resolution, not inside it — the query first finds all products matching your category and tag filters, then removes the ones you’ve explicitly excluded.
One thing to know: if you exclude a product that is the only product in a selected category, the campaign will run with zero products in scope and nothing will be discounted. Campaign Intelligence will flag this as a health issue before you launch, which is a useful catch for campaigns where the exclusion list might accidentally empty the pool.
Category exclusions don’t change the category itself
Excluding a product from a campaign does not remove it from the category in WooCommerce. The product remains in the category for browsing and navigation purposes. The exclusion only affects campaign scope. If you later create a second campaign targeting the same category, the excluded product will be eligible again unless you exclude it there too.
How variable products are handled
When a variable product is in a targeted category, Smart Cycle Discounts applies the discount at the parent product level. All published variations of that product receive the same percentage or fixed discount applied to their individual regular prices. You cannot use a category campaign in SCD to discount only some variations of a variable product — the category query returns the parent product ID, and all its variations are covered.
The discount filters operate on woocommerce_product_get_sale_price, woocommerce_product_get_price, and woocommerce_get_price_html for display, and on woocommerce_before_calculate_totals for cart and checkout. These hooks cover variable products and their variations through WooCommerce’s standard price resolution. Your theme’s “Sale!” badge and strikethrough pricing will appear on the variable product’s shop page and on its variations when customers select specific options.
One thing to note about variable products and the “On Sale” filter: SCD applies discounts at display time through WooCommerce’s price filters rather than writing to the stored _sale_price database field. This means discounted variable products won’t appear in WooCommerce’s built-in “On Sale” shortcode/block or in third-party sale filters (FacetWP, etc.) that read from the stored field. This is the same behavior as other runtime pricing plugins, and it’s not a category-specific limitation — it applies across all SCD campaign types. For more detail on this architecture and its implications, the post on why discounted products don’t show in WooCommerce’s On Sale filter explains exactly what’s happening and what you can do about it.
Overlapping campaigns and priority
If you run two campaigns that both target products in the same category — say, a storewide 10% off and a category-specific 25% off that overlap in date range — Smart Cycle Discounts uses a priority system to determine which discount applies. The campaign with the lower priority number wins (priority 1 wins over priority 5). Only one campaign’s discount is applied per product per session.
Campaign Intelligence will flag potential overlaps before you activate a campaign. It checks whether any active or scheduled campaigns share product scope with the one you’re launching and surfaces that as a health warning. This doesn’t prevent you from running the campaign, but it gives you the information to decide whether the overlap is intentional (you want the higher priority to win) or accidental (you need to adjust dates or scope).
For a full explanation of how the priority system works and how to use it deliberately, the guide on WooCommerce campaign priority in Smart Cycle Discounts covers the mechanics and common patterns.
Setting up a category discount campaign, step by step
Create a new campaign
In your WordPress admin, go to Smart Cycle Discounts → Campaigns → Add New. The 5-step wizard opens. In Step 1 (Basic Information), give the campaign a name that makes the scope clear — “Winter Jackets Category Sale” is more useful than “December Campaign” when you’re looking at a campaign list six months later. Choose your discount type. Percentage off is the most common choice for category-wide sales and is included in the free version.
Configure product selection
In Step 2 (Product Selection), choose “All Products” as the selection mode. This is not the same as “all products in your catalog” — it means “all products matching the filters you apply.” Below the selection mode, you’ll see the category and tag pickers. Select the category (or categories) you want to include. If you want to narrow the scope to a specific tag within that category, add the tag. If you want to exclude specific products, add them to the exclusion field. The count of matching products updates as you configure the filters, so you can confirm the scope before moving on.
Set the discount value
In Step 3 (Discount Configuration), enter the discount amount. For a percentage discount, this is the percentage to take off the regular price of each product. For a fixed amount, it’s the flat deduction applied per product. For a fixed discount applied to an entire category, be aware that products with a price lower than the fixed amount will show a negative or zero price — Campaign Intelligence will warn you if it detects this risk based on your category’s minimum price. Set a floor value if needed (the campaign won’t let the discounted price drop below zero by default).
Schedule the campaign
In Step 4 (Scheduling), set the start and end dates and times. The plugin activates and deactivates the campaign automatically based on these times — no manual action required. If you’re running this as a regular seasonal promotion (end-of-season clearance, for example), you can configure it as a recurring campaign on the same page. A recurring category campaign will re-run on whatever schedule you set, applying the same discount to whatever products are in the category at each activation. Products added to the category between cycles are automatically included at the next activation.
Review and launch
Step 5 (Review & Launch) shows a summary of the campaign including the estimated product count, any health warnings from Campaign Intelligence, and a pre-launch checklist. Pay attention to overlap warnings if they appear — they indicate another active or scheduled campaign covers some of the same products. Review the scope, check the product count matches your expectation, and set the campaign to Scheduled (or Active if you want it to start immediately).
Common mistakes and how to catch them
Not auditing category membership before launching
The most common category-discount mistake isn’t a configuration error — it’s discounting products you didn’t realise were in the category. If a product was assigned to “Electronics” for navigation reasons two years ago and you’ve forgotten about it, it will be included when you run a category-scoped campaign. Before launching any significant category discount, open your WooCommerce product list, filter by the target category, and scan the results. The product count that SCD shows during campaign setup reflects the same query, so if the number surprises you, investigate before scheduling.
Expecting categories to cascade to child categories automatically
WooCommerce categories are hierarchical in structure but not necessarily in query behavior. Smart Cycle Discounts queries the exact terms you select. If you select the “Clothing” parent category but not its children (“T-Shirts,” “Hoodies,” “Jackets”), only products assigned directly to “Clothing” are included — not products assigned to the child categories. If you want the whole clothing range, you need to select all the relevant terms, or assign the relevant products to the parent category as well.
If your category structure is deep and selecting every child would be cumbersome, consider whether a tag-based approach (tag all qualifying products with a campaign tag) or a clean taxonomy reorganisation is worth doing first.
Using a fixed amount on a wide-ranging category
A 20% discount adjusts proportionally to the product price, so it’s inherently safe across a diverse category. A fixed $10 off applied to a category that contains both a $200 item and a $7 item will produce a negative price for the $7 item unless you’ve set a floor. Campaign Intelligence will warn you if it detects that your fixed discount amount exceeds the minimum price in the targeted category — but the check is based on the products it can sample, not an exhaustive catalog scan. Don’t rely on the warning as a complete safeguard for fixed-amount category campaigns on heterogeneous catalogs.
Running a category campaign without checking for active overlapping campaigns
If you have a storewide percentage-off campaign running and you create a new category-specific campaign with higher priority, the category products will get the higher-priority discount and the storewide campaign won’t apply to them. That may be exactly what you want. But if you set the priority wrong, customers in that category might get the storewide rate instead of the category-specific offer you intended. Always check the priority settings for overlapping campaigns deliberately — don’t leave it to chance.
Three category campaigns you can run today
End-of-season clearance
Select your seasonal category (“Summer Collection” or “Winter Outerwear”), apply a 25–30% percentage discount, and schedule it for the last two weeks of the season. Use the exclusion list to protect any items you’ve already marked down manually or that are running on a different campaign. Set an end date rather than running indefinitely — clearance categories have a useful life, and you don’t want the sale to persist into the new season by accident.
Category flash sale with recurring weekly cadence
Select a category with strong weekend demand (“Electronics Accessories,” “Home Fitness”), apply a moderate percentage discount, and configure it as a recurring weekly campaign that activates Friday morning and ends Sunday night. Once set up, the campaign runs every weekend without any additional input from you. Products added to the category during the week are included in the next cycle automatically. For the full setup details on recurring campaigns, the guide on setting up a recurring WooCommerce discount campaign covers the two scheduling modes in depth.
Tag-narrowed category promotion
If your “Books” category contains 500 products but you want to promote only the titles you acquired in the last quarter, tag those titles with “new-arrival” and then configure a campaign targeting the “Books” category AND the “new-arrival” tag. The AND logic means the campaign covers exactly the intersection — new books only, not the entire catalog. When new stock arrives and you tag it correctly, it automatically enters the next campaign cycle. This approach scales without you having to maintain a product list.
Key takeaways
- Category selection in SCD uses an OR match across selected categories — a product qualifies if it belongs to any of the selected categories.
- When you add tag filters, the logic becomes category OR AND tag OR — both the category and tag conditions must be satisfied for a product to qualify.
- Product exclusions are applied after the taxonomy query, letting you trim specific items from an otherwise broad category scope.
- Variable products are targeted at the parent product level; all published variations receive the same discount applied to their individual regular prices.
- Category campaigns do not write to the stored
_sale_pricefield, so they won’t appear in WooCommerce’s native On Sale filter — but your theme’s sale badge and strikethrough pricing do render correctly on shop and category pages. - Parent categories do not automatically include child categories — select every relevant term explicitly if you want full coverage.
- Category campaigns update dynamically — products added to a targeted category are included at the next cache refresh (within 15 minutes).
Common questions
Do I need the Pro version to use category targeting?
No. Category and tag selection is available in the free version of Smart Cycle Discounts. You can select one or more categories, combine with tags, and add exclusions without a Pro license. The discount types available for category campaigns follow the usual free/Pro split: percentage off, fixed amount, and BOGO are free; tiered pricing, spend thresholds, and bundles are Pro.
Will new products I add to the category be included automatically?
Yes, with a small delay. Smart Cycle Discounts caches the product selection for 15 minutes. When a product is added to or removed from a targeted category, the cache is invalidated and rebuilt on the next request. In practice this means a new product will start receiving the discount within about 15 minutes of being assigned to the category, with no manual action required.
Can I discount only in-stock products within a category?
Yes. The product selection step includes a stock status filter. You can narrow the category scope to in-stock products, out-of-stock products, or leave it unfiltered (which includes all publish-status products regardless of stock). In-stock-only filtering is useful for clearance campaigns where you don’t want to advertise a discount on items you can’t fulfill.
What happens if a product is in two targeted categories?
The product qualifies and receives the discount once. The category query uses term IDs and returns a deduplicated list of product IDs, so a product appearing in multiple targeted categories is treated as a single match, not a double discount.
Can I run a category campaign and exclude an entire subcategory?
Not directly through the exclusion list, which accepts individual product IDs. If you want to exclude a whole subcategory, the practical approach is to select only the specific categories you want included (rather than a broad parent), or to use a tag filter to narrow the scope to products with a specific attribute. You can also build a specific-products campaign instead of a category one when the category structure doesn’t map cleanly to your intended scope.
Does the discount apply on product pages as well as shop/category pages?
Yes. Smart Cycle Discounts applies discounts through WooCommerce’s price filters, which cover shop listings, category pages, search results, and individual product pages. The sale badge and strikethrough price appear consistently across all these contexts without any additional configuration.
Run category campaigns without the manual work
Smart Cycle Discounts handles category targeting, scheduling, and automatic deactivation — so a storewide sale or an end-of-season clearance runs from a single configuration, not a list of manual edits. Category and tag selection are available in the free version.