WooCommerce Tips

WooCommerce Spend Threshold Discounts: Cart Total vs. Order Total — What’s the Difference?

🛒

WooCommerce Discount Mechanics

Your Spend Threshold Is Watching the Wrong Number.

WooCommerce spend threshold discounts check a specific cart figure — not the one most merchants assume. Understanding exactly which number gets evaluated explains why thresholds sometimes fail silently, and how to set them up so they behave predictably.

Spend threshold discounts are one of the cleanest average-order-value tools available in WooCommerce. “Spend $75, save 15%” is a promise customers understand immediately, and it works — when it fires. When it doesn’t fire, merchants are often left genuinely confused, because the cart total shown on screen looks like it should be crossing the line.

The confusion usually comes down to one thing: the number a spend threshold checks is not always the same as the number the customer sees. WooCommerce has more than one “cart total,” and spend discount rules typically check a specific one — the pre-coupon subtotal — which is not the same as what the customer sees displayed in the cart after their coupon has been applied.

This post explains the mechanics precisely: which figure the cart subtotal actually represents, what happens when a coupon is in play, why variable products are sometimes a surprise, and how to diagnose a WooCommerce spend threshold discount that isn’t triggering when you expect it to.

What a WooCommerce spend threshold discount actually is

A WooCommerce spend threshold discount is a cart-level rule that unlocks a discount — percentage off, fixed amount off, or free shipping — when the cart total crosses a specified minimum value. No coupon code required from the customer. They add items, reach the amount, and the discount applies automatically.

What makes a spend threshold distinct from a regular discount is the qualification step. A 15% sitewide sale reduces every product’s price unconditionally. A spend threshold checks a condition first — “is the cart total at or above this number?” — and only then applies the reward. That qualification check is where the cart-total definition question becomes important.

WooCommerce core has a minimum spend field in its coupon system, but that requires the customer to manually enter a coupon code and already know the threshold exists. Automatic spend threshold discounts — where the cart is evaluated silently and the discount fires without any customer action — require a plugin that adds this as a cart discount rule. The discussion below applies to any plugin that uses the WooCommerce cart’s get_subtotal() method for its threshold check, which is the standard approach.


Spend threshold is a Pro-level feature in Smart Cycle Discounts

If you are using Smart Cycle Discounts: spend threshold discounts are available in the Pro version. The free version includes percentage discounts, fixed amount discounts, and BOGO (buy one get one) deals. Tiered pricing, spend thresholds, and bundle discounts require a Pro license. This is confirmed in the plugin’s feature gate and readme. If you are evaluating which tier you need, the free vs Pro features page covers the full breakdown.

Which cart total does WooCommerce actually check?

WooCommerce exposes several different “total” values on the cart object. They sound similar but represent different figures:

  • Cart subtotal (WC()->cart->get_subtotal()) — the sum of line item prices × quantities, before any coupon deductions and before taxes are added. This is the item value before any cart-level adjustments.
  • Cart total after coupons — the subtotal after WooCommerce has applied coupon deductions. This is a lower number when a coupon is present.
  • Order total — the full amount the customer pays: items + shipping + taxes − coupons. This is what appears on the order confirmation.

Spend threshold discount plugins that check the standard WooCommerce cart subtotal — including Smart Cycle Discounts — evaluate WC()->cart->get_subtotal(). That means the threshold check happens against the pre-coupon item total, not the post-coupon amount and not the order total including shipping and taxes.

For most transactions, this is the number you want to use. If a customer has $80 worth of items in their cart and your threshold is $75, the threshold fires — regardless of whether they have a coupon, and regardless of whether shipping adds $8 to their order total. The rule is evaluating what they brought to the store, not what they’re paying after all adjustments.


What this means for threshold setting

Because the check runs against the item subtotal (before coupons), your threshold should be set relative to your average order value in terms of products added, not the after-coupon figure. If your customers typically add $90 of products and then apply a $15 coupon, the subtotal that gets checked is $90 — not $75. Set your threshold based on product value in the cart, not the final payment amount.

The coupon timing problem: why a customer’s coupon can un-qualify them

Here is the scenario that generates the most “it’s not working” support questions: a customer applies a coupon, and the threshold that was previously qualifying their cart no longer fires.

This can happen in a specific way. The subtotal (get_subtotal()) is ordinarily the pre-coupon item total. But WooCommerce’s discount calculation order matters for when a spend threshold plugin evaluates the cart. If the plugin evaluates the cart after WooCommerce has already applied coupon discounts to line item prices, the subtotal the plugin sees may reflect those coupon-reduced prices rather than the original ones.

In practice, this depends on when in WooCommerce’s cart calculation lifecycle the spend threshold plugin hooks into the cart. Plugins that hook late in WooCommerce’s cart recalculation (after coupons are applied) may see a lower effective subtotal than plugins that hook earlier.

The more common and simpler case: the customer’s cart total without a coupon is $78, which crosses a $75 threshold. They then apply a 10% coupon. If that coupon reduces product prices at the line-item level before the subtotal is calculated (rather than applying as a cart-level deduction after), the subtotal the threshold check sees drops to $70.20 — below the threshold. The discount disappears.


Coupons and spend thresholds don’t always stack the way customers expect

From a customer’s perspective, it looks like their coupon “broke” the deal they were about to qualify for. From your perspective, it may look like the threshold is behaving inconsistently. This is a real interaction between two separate discount mechanisms. It is not a bug — it’s the expected behavior of cart calculations when multiple discount layers are active. Whether this is the right outcome for your store depends on whether you want coupons to count toward threshold qualification or not. There is no universal right answer, but being clear on your own store’s intended behavior lets you design your campaigns accordingly.

One practical implication: if you are running a spend threshold campaign alongside active coupon codes, think carefully about the interaction. A customer who is $5 away from qualifying and applies a 15% coupon may find the threshold no longer fires. That may frustrate them if they were deliberately trying to hit the spend level. For a deeper look at how WooCommerce handles multiple overlapping discount mechanisms, the post on the WooCommerce discount stacking problem covers the mechanics of how coupons and campaign discounts interact.

Variable products and the subtotal calculation

Variable products — products with multiple variations like size or color, each potentially at a different price — behave consistently with simple products for spend threshold purposes. The subtotal used for threshold evaluation is the sum of line item prices (the specific variation price × quantity for each line), before coupons. There is no special handling for variable products in the threshold calculation.

Where variable products create confusion is at the product page level. If your product page shows the price range for a variable product (e.g., “$35 – $65”), a customer may mentally calculate their cart value using the low end of the range, add the product, select a higher variation, and find their actual subtotal is different from what they estimated. This is a display issue, not a discount calculation issue, but it can lead to a customer expecting to qualify for a threshold and then being surprised when the cart total works out differently.

The fix is display-level, not calculation-level: ensure that by the time a customer reaches the cart page, the variation prices are clearly visible per line item. The spend threshold evaluation will use those actual line item prices correctly. Post 39 on how WooCommerce sale prices work with variable products goes deeper on the display mechanics if this is an active concern in your store.

Why free-shipping thresholds and spend-discount thresholds behave differently

WooCommerce has built-in support for free shipping thresholds — a minimum order amount that, once reached, unlocks free shipping for the customer. Many merchants who have used this feature assume spend-discount thresholds work the same way. They do not, and the difference matters.

Free-shipping thresholds in WooCommerce core

WooCommerce’s native free-shipping threshold (set in Shipping → Shipping Methods → Free Shipping) evaluates against the order total after coupons when the “Minimum order amount” is combined with coupons. The exact behavior depends on the “Requires” setting: “A minimum order amount” checks cart item totals; “A minimum order amount OR a coupon” or “A minimum order amount AND a coupon” changes what value qualifies.

In short, free-shipping threshold evaluation can be configured to use different totals depending on your settings. This is different from a spend-discount threshold, which evaluates the cart subtotal as defined by the plugin.

Why this causes confusion

A merchant who has “free shipping over $75” set up natively in WooCommerce may notice that customers with a coupon still qualify for free shipping — because their pre-coupon order total was above $75. They then set a spend-discount threshold at $75 expecting identical behavior. But depending on coupon timing and how their discount plugin hooks into the cart, the spend-discount threshold may evaluate at a different point than the free-shipping check.

The result: free shipping fires, but the spend discount does not, or vice versa, even with the same threshold value. A customer gets free shipping but does not get the discount. That inconsistency looks like a bug but is actually two separate systems evaluating at different points in WooCommerce’s cart lifecycle.

If you need a spend-discount threshold to behave identically to your free-shipping threshold, verify exactly which cart value each is evaluating. They are not guaranteed to match without deliberate configuration.

The “it’s not triggering” checklist: the most common causes

When a spend threshold discount is not firing and you cannot immediately see why, work through these in order.

1. The cart subtotal is below the threshold, not above it

Check the actual cart subtotal, not the total the customer sees in the UI. If coupons are applied, the displayed total may look lower than the threshold, but the subtotal being checked may be the pre-coupon figure (or vice versa — see above). Open an actual cart session with the exact items and check what get_subtotal() returns vs. what your threshold is set at.

2. The campaign is not active

Check that the campaign status is “Active” and that today’s date falls within the campaign’s scheduled window. A campaign with an expiry date in the past or a start date in the future will not fire regardless of cart total. Similarly, recurring campaigns that run on a specific schedule (e.g., weekends only) will not fire outside their scheduled window even if all other conditions are met.

3. The product is not in the campaign’s scope

If your spend threshold campaign targets specific products or categories, the discount only evaluates for carts containing those products. A customer whose cart consists entirely of products outside the campaign scope will not trigger the threshold. Check whether the products actually in the cart match the campaign’s product selection.


A real-world example

A kitchen goods store set up a “Spend $80, get 12% off” campaign scoped to their cookware category. A customer added $95 worth of products and expected to qualify. But half their cart was bakeware, which was in a different category and excluded from the campaign scope. The cookware portion of their subtotal was $44. The threshold never fired. The merchant’s campaign was behaving exactly as configured — the problem was the scope definition did not match the merchant’s intent.

4. A higher-priority campaign is winning the conflict

If another active campaign targets the same products, the campaign priority system determines which one applies. The higher-priority campaign wins. If your spend threshold campaign is lower priority than another campaign already covering those products, the spend threshold will be bypassed in favor of the winning campaign. Check for campaign priority conflicts if you have multiple active campaigns with overlapping product scopes.

5. The threshold amount itself may be wrong

This sounds obvious but happens. Check the actual threshold value configured in the campaign — particularly if the campaign was duplicated or edited by someone else. Also note that Smart Cycle Discounts (Pro) surfaces a health warning when the first threshold is below $20, flagging cases where almost every order will qualify. If you see a caution on the Campaign Health check about the threshold being very low, this is the plugin telling you the threshold may not be doing meaningful work.

6. The “per item” apply_to setting

Smart Cycle Discounts lets you configure how a discount applies — per item or against the cart total. For a spend threshold campaign, the intended setting is almost always “cart total” application. If the apply_to value is set to “per item,” the plugin generates a configuration hint flagging the mismatch: spend thresholds are cart-level qualifiers that work better with cart_total application. Check this setting if the campaign is configured but not applying as expected.

Setting up spend thresholds in Smart Cycle Discounts

Smart Cycle Discounts Pro implements the spend threshold discount type through its campaign wizard. The threshold evaluation uses WC()->cart->get_subtotal() — the standard WooCommerce cart subtotal — as the qualifying amount. If that value is not yet available (e.g., during early page load before the cart is initialized), the engine falls back to the context-passed cart total if one is provided, otherwise it defaults to 0 and no threshold will qualify.

When configuring a spend threshold campaign:

  • Set the spend amount — the minimum subtotal that triggers the reward. You can add multiple thresholds to a single campaign (up to 20 per campaign), each with its own spend amount and discount. Threshold amounts must be in strictly ascending order.
  • Choose the discount type for each threshold: percentage off or fixed amount off. These can differ across thresholds in a multi-threshold campaign.
  • Set the campaign schedule. Running for a defined window is almost always better than running indefinitely — it preserves the sense of genuine opportunity that makes threshold offers effective. See post 16 on spend threshold strategy and AOV optimization for the full argument on scheduling.

The Campaign Health check in the wizard will flag common configuration issues: a threshold below $20 (where most orders will qualify, reducing the campaign’s behavioral impact), a fixed discount amount that equals or exceeds the qualifying spend amount (which the validator treats as a blocking issue), and the per-item apply_to hint mentioned above. These checks surface before launch, not after an order has already applied an unexpected discount.

The spend threshold discounts documentation covers the full wizard configuration flow.

Running multiple thresholds in a single campaign

Smart Cycle Discounts Pro supports multiple thresholds in a single campaign — for example, “Spend $50: get 10% off / Spend $100: get 15% off / Spend $150: get 20% off.” When a customer’s cart reaches the checkout, the engine finds the highest qualifying threshold and applies that tier’s discount. The customer gets the best rate they have earned, not a stacked combination of all qualifying tiers.

This is worth stating explicitly because it affects how you design your tier gaps. If your thresholds are $50 / $100 / $150 and a customer has $120 in their cart, they qualify for both the $50 tier and the $100 tier. The $100 tier’s discount wins. They do not receive 10% + 15% stacked — they receive 15%. The selection logic picks the highest earned tier, not the sum of all earned tiers.


Design your tier gaps with the customer journey in mind

Multi-threshold campaigns work best when each tier represents a real behavioral decision point for your customers. If your products are mostly priced at $30–$60 and your tiers are $50 / $55 / $60, they are so close together that customers will not experience them as meaningfully different. Spread tiers far enough apart that reaching the next one requires a deliberate additional purchase, not just rounding up on an item they were already buying.

Multiple thresholds in one campaign are also subject to the ascending-order validation: Smart Cycle Discounts will reject a configuration where thresholds are not in strictly increasing order of spend amount. This prevents the ambiguous state of two thresholds qualifying at the same cart total.

Frequently asked questions

Does a WooCommerce spend threshold check the total before or after coupons?

This depends on the plugin implementation. Smart Cycle Discounts evaluates the cart using WC()->cart->get_subtotal(), which is the WooCommerce cart subtotal — the sum of line item prices times quantities, before coupon deductions are applied as a cart-level adjustment. In most standard WooCommerce setups, this means the threshold checks the pre-coupon item total. However, if a coupon adjusts individual line item prices before WooCommerce compiles the subtotal (rather than applying as a cart-level deduction afterward), the subtotal may already reflect those adjustments. The safest approach: test your specific coupon and campaign combination by adding items to a real cart and checking whether the threshold fires as expected.

Does shipping count toward the WooCommerce spend threshold?

No. Spend threshold discounts that use the cart subtotal (get_subtotal()) evaluate only the product item total — quantities times item prices. Shipping costs are added to the cart separately and are not included in the subtotal figure. A customer with $68 of products and $12 shipping does not have an $80 subtotal for threshold purposes — they have a $68 subtotal. Set your threshold amounts based on product value in the cart, not the final order amount including shipping.

Does tax count toward the spend threshold in WooCommerce?

No. The cart subtotal (get_subtotal()) is the pre-tax item total. Taxes are calculated separately and added to the order total. Whether your store displays prices inclusive or exclusive of tax affects what the customer sees, but the subtotal value that gets passed to the threshold check is the pre-tax figure. This means a customer in a high-tax jurisdiction does not qualify for a threshold more easily — the item prices (pre-tax) are what count, not the tax-inclusive order total they pay.

Why did my spend threshold fire on one order but not another with the same products?

The most common reasons for inconsistent threshold firing are: (1) a coupon was applied on one order but not the other, affecting the effective subtotal; (2) the product variations selected differed in price; (3) the campaign was in its scheduled window for one order but not the other; or (4) a higher-priority campaign was active on one order and claimed the product, bypassing the threshold campaign. Work through the “not triggering” checklist in this post to identify which scenario applies.

Can I set a spend threshold based on the order total including tax and shipping in WooCommerce?

Not with standard spend threshold plugins that use get_subtotal(). Those evaluate the pre-tax, pre-shipping item total. If you specifically need to evaluate against the full order total (including tax and/or shipping), you would need a plugin that explicitly hooks into a later stage of WooCommerce’s cart calculation and reads a different cart value. Most standard implementations use the item subtotal because it is a more stable and predictable figure — the order total after tax and shipping varies per customer based on location and selected shipping method, which makes it a poor threshold baseline for most promotional purposes.

How many spend thresholds can I configure in a single Smart Cycle Discounts campaign?

Smart Cycle Discounts Pro supports up to 20 thresholds per campaign, with each threshold defined by a spend amount, a discount type (percentage or fixed), and a discount value. Thresholds must be in strictly ascending order of spend amount. In practice, most spend threshold campaigns work well with two to four tiers — beyond that, the messaging complexity tends to reduce the motivational clarity that makes tiered offers effective.

What to take away

WooCommerce spend threshold discounts evaluate against the cart subtotal — the sum of item prices times quantities, before coupon deductions and before shipping and taxes are added. That is almost always the right number to use, but it means the threshold check is not the same as the total the customer sees on screen after a coupon has been applied. Understanding that distinction resolves most “it’s not triggering” questions before they become support tickets.

For most campaigns, the practical workflow is: set your threshold based on product value in the cart (your AOV without coupons, adjusted upward to drive incremental spend), test with a real cart to confirm the trigger point, and check that the campaign is active, scoped correctly, and not being bypassed by a higher-priority competing campaign. Those four checks cover the overwhelming majority of threshold failures.

If you want to go deeper on the strategy side — how to set the threshold number, what discount percentage to offer, and how to display progress messaging that actually changes behavior — the post on spend threshold strategy and AOV optimization covers the full picture. And if you are running other discount types alongside a threshold campaign, understanding the discount stacking mechanics before launch will help you predict exactly which discount fires for each cart scenario.