SCD + WooCommerce Subscriptions: Which Discount Types Apply to Renewals
WooCommerce Tips · Smart Cycle Discounts
Which Discount Types Apply to Subscription Renewals?
Smart Cycle Discounts works with WooCommerce Subscriptions โ but the free and Pro tiers do different things, and only certain discount types carry through to renewal orders. This post explains the mechanics precisely, so you know what to expect before you build a subscription campaign.
If you run subscription products in WooCommerce and you’re wondering whether Smart Cycle Discounts will apply your campaign discount to renewal orders, the short answer is: yes, with conditions. The free version applies the discount to the recurring subscription price at the product-page and checkout level automatically โ the same way it handles any regular product. The Pro version goes further, letting you choose exactly where the discount lands and for how long.
But several common questions don’t have obvious answers: Does a BOGO campaign carry through to renewals? What happens when a campaign expires mid-offer? Does the free tier touch renewal orders at all, or only the initial checkout?
This post answers those questions by going directly to the plugin code (version 2.1.1, the current stable release as of writing). Nothing here is inferred from marketing copy.
Key takeaways
- Free tier: campaign discounts apply to the subscription’s recurring price on product pages and at initial checkout. Strikethrough pricing displays correctly. No renewal-order hooks fire on free.
- Pro tier: SCD hooks into renewal order creation and applies a percentage or fixed-amount discount to renewal line items, then tracks how many renewals have occurred against a configurable limit.
- Only percentage and fixed-amount discounts apply to renewals. BOGO, tiered, spend threshold, and bundle campaigns do not carry through to renewal orders โ the subscription handler uses a simplified discount calculation that supports only those two types.
- Renewal limit vs. campaign expiry: if the campaign’s active window ends before the renewal limit is exhausted, the discount stops โ campaign status gates every renewal check.
- SCD does not handle subscription pausing, cancellation interception, or prorating. Those stay with WooCommerce Subscriptions’ native feature set.
What Smart Cycle Discounts does with subscription products
Smart Cycle Discounts is built as a campaign system for WooCommerce discounts. It applies discounts by hooking into WooCommerce’s price filters at display time, so the discount appears as strikethrough pricing on product pages. Subscription products are fully supported as products: you can target them in any campaign.
What makes subscription products different is what happens after the initial checkout. Renewal orders are created programmatically by WooCommerce Subscriptions at each billing cycle. They don’t go through the cart the way a normal order does. So “the discount applies to the product” is not the same as “the discount applies to every renewal order.” Those are two separate hooks, and Smart Cycle Discounts handles them differently in free vs. Pro.
This applies to WooCommerce Subscriptions
The renewal discount behavior described here is specific to the official WooCommerce Subscriptions extension. If WooCommerce Subscriptions is not active, the subscription-specific settings in Smart Cycle Discounts simply do not appear in the campaign wizard. The subscription handler checks for the WC_Subscriptions_Product class before registering any hooks.
Free tier: discount applies to the recurring price
On the free tier of Smart Cycle Discounts, a campaign that includes subscription products will apply the discount to the subscription’s recurring price. This means:
- The product page shows strikethrough pricing โ for example,
$29/month$23.20/month for a 20% off campaign. - At initial checkout, the customer sees the discounted price and pays the discounted first billing cycle.
- The free tier does not hook into renewal order creation. No
wcs_renewal_order_createdaction fires from the free version of the handler.
In practice, this means a free-tier campaign discount does not automatically carry through to subsequent renewal orders. The subscriber signs up at the discounted price, but WooCommerce Subscriptions stores the subscription’s price at the time of signup. Whether subsequent renewals continue at the discounted price depends on how WooCommerce Subscriptions handles the stored subscription price โ which is its own behavior, not something SCD controls on free.
If you need predictable, enforced renewal discounts with a defined endpoint, that requires the Pro tier.
Pro tier: sign-up fee, recurring price, and renewal limits
Smart Cycle Discounts Pro adds three subscription-specific controls to the campaign wizard, all gated behind the subscription_controls feature flag:
Subscription discount target
A select field with three options:
- Recurring price only โ the default. The discount applies to the recurring billing amount.
- Sign-up fee only โ the discount applies to the sign-up fee on the subscription product, not to ongoing renewals. Useful for “no setup fee this month” promotions.
- Both sign-up fee and recurring โ the discount applies to both components.
The sign-up fee discount is applied via a hook on woocommerce_subscriptions_product_sign_up_fee, which is only registered on Pro. The recurring price discount is applied at checkout through the same price-filter hooks used for all SCD campaigns.
Renewal limit
A number field (0โ999) that controls how many renewal payments receive the discount. The default is 0, which means unlimited โ the discount applies to every renewal as long as the campaign is active.
When you set a renewal limit of, say, 3: the subscriber’s first three renewal payments are discounted, and the fourth renewal bills at full price automatically. No manual intervention required. The plugin tracks the renewal count in subscription meta (_wsscd_renewal_count) and removes the campaign link from the subscription (_wsscd_campaign_id) once the limit is reached.
This is the mechanism that makes defined-term retention offers viable โ “20% off for the first three months, then full price” โ without relying on coupon expiry dates or manual follow-up.
Which discount types apply to renewals
This is the question most store owners get wrong. Smart Cycle Discounts supports six discount types across free and Pro. But not all of them apply to renewal orders. Only two do.
| Discount type | Applies to renewal orders (Pro) | Notes |
|---|---|---|
| Percentage | Yes | Calculated as a percentage reduction on the product’s regular price at renewal time. |
| Fixed amount | Yes | Subtracted from the product’s regular price, floored at zero. |
| BOGO | No | Buy/get mechanics are cart-level logic that does not apply to programmatic renewal orders. |
| Tiered quantity (Pro) | No | Requires cart quantity to evaluate tiers; renewal orders don’t go through that evaluation. |
| Spend threshold (Pro) | No | Cart-total-based condition; renewal orders are generated directly without a cart. |
| Bundle (Pro) | No | Bundle mechanics depend on cart product combinations; not evaluated at renewal. |
The reason is architectural: the subscription handler’s renewal discount method (apply_renewal_discount__premium_only) uses a simplified calculation that handles only percentage and fixed discount types. Any other discount type passes through unchanged โ the renewal order line items are left at the product’s regular price.
This is a reasonable design choice. Tiered, spend threshold, and bundle discounts require cart context โ quantities across multiple items, total cart values, product combinations โ that simply doesn’t exist in a programmatic renewal order. BOGO has the same constraint. Trying to force those mechanics onto a renewal order would produce unpredictable results.
Plan your subscription campaigns accordingly
If you want a discount to follow a subscriber through renewal payments, use a percentage or fixed-amount campaign. A BOGO, tiered, or bundle campaign can include subscription products and will discount the initial checkout correctly โ but the discount will not appear on renewal orders. Make sure subscribers understand at signup what they’re paying at renewal.
How the renewal discount mechanism works
Understanding the mechanics helps you configure campaigns correctly and troubleshoot when something doesn’t behave as expected.
When a subscriber first signs up through a campaign, Smart Cycle Discounts (Pro) records the campaign ID on the subscription object (_wsscd_campaign_id) and initializes a renewal count of zero. This happens on the woocommerce_checkout_subscription_created action โ at checkout, not at renewal time.
When WooCommerce Subscriptions generates a renewal order (the wcs_renewal_order_created action), the SCD subscription handler fires and checks:
- Does this subscription have a campaign ID stored in meta?
- Has the renewal limit been reached? (If the limit is 0, this check is skipped โ unlimited.)
- Is the campaign still active (status =
active)?
If all three conditions pass, the handler iterates the renewal order’s line items, calculates the discounted price using the simplified percentage/fixed method, and updates the line item subtotals and totals before the order is saved. It also records the campaign ID, a discount-applied flag, the original price, and the discounted price in order item meta โ useful for reconciliation and refund handling.
After payment completes (woocommerce_subscription_renewal_payment_complete), the renewal count is incremented. If the count now equals the renewal limit, the campaign ID is removed from the subscription. No more renewal discounts will apply, regardless of whether the campaign is still active.
What triggers the renewal count increment
The renewal count increments on payment completion, not on renewal order creation. This means: if a renewal order is created but payment fails (declined card, expired payment method), the count does not increment. The subscriber stays eligible for the discount on the next retry. This is the correct behavior โ the limit tracks successful discounted payments, not attempted ones.
Campaign expiry vs. renewal limit: which one wins
Every campaign in Smart Cycle Discounts has an optional end date. The subscription handler checks the campaign’s status at each renewal โ if the campaign has expired (moved to the expired status because its end date passed), the renewal discount will not apply, even if the subscriber’s renewal limit has not been exhausted.
This is the right behavior for most use cases: a campaign is a bounded promotion, and when the promotion ends, its effects should end. But it creates a potential confusion for retention discount scenarios where you want the offer to run for a fixed number of renewals regardless of calendar date.
For that use case, configure the renewal limit and leave the campaign’s end date open (or set it far in the future). If you set both a renewal limit and an end date, whichever condition is reached first terminates the discount for that subscriber.
Practical configuration
For a signup promotion that should discount the first three renewals regardless of when signups happen: create a campaign with no end date (or a very distant end date), a renewal limit of 3, and a percentage or fixed-amount discount. Leave the campaign running. New subscribers who join under the campaign get their three discounted renewals; existing subscribers who signed up under a previous campaign version are unaffected.
For more on how Smart Cycle Discounts campaign scheduling works generally โ including how recurring campaigns behave and the difference between continuous and instances modes โ the post on setting up recurring WooCommerce sales covers the scheduling mechanics in detail.
What Smart Cycle Discounts does not handle
Being precise about what the plugin does not do is as useful as knowing what it does. Several common subscription management tasks are outside SCD’s scope entirely:
- Subscription pausing. Pause and suspend workflows are handled entirely by WooCommerce Subscriptions. SCD has no pause functionality and does not need to โ this is not a discount-campaign concern.
- Cancellation interception. No cancel-screen logic exists in SCD. Presenting an offer when a subscriber clicks to cancel requires a dedicated plugin or custom code that hooks into the WooCommerce Subscriptions cancellation flow. SCD handles what the discount looks like and how long it runs; the interception is a different layer.
- Prorating mid-cycle. WooCommerce Subscriptions handles prorating for plan switches natively. SCD does not add proration calculation โ it operates on renewal orders, not mid-cycle billing adjustments.
- Applying discounts retroactively to existing subscriptions. The renewal discount mechanism requires the campaign ID to be set on the subscription at checkout. Subscriptions that predate a campaign cannot be enrolled retroactively via the plugin โ you’d need to set the
_wsscd_campaign_idsubscription meta manually if you wanted that behavior, which is outside normal plugin operation.
If you’re thinking through the broader strategy of subscription discounts โ when to discount vs. pause, how win-back offers interact with subscriber behavior, and the economics of retention discounts running longer than intended โ the post on WooCommerce subscription discount strategy covers that territory without assuming any particular plugin setup.
Frequently asked questions
Does Smart Cycle Discounts work with WooCommerce Subscriptions on the free tier?
Yes. On the free tier, Smart Cycle Discounts applies campaign discounts to subscription products at the product-page and initial-checkout level. Subscribers see strikethrough pricing, and the discounted price applies to the first billing cycle. The free tier does not hook into renewal order creation, so the renewal-specific discount mechanism (enforced renewal limits, sign-up fee targeting) requires Pro.
Which discount types carry through to renewal orders?
Only percentage and fixed-amount discounts apply to renewal orders in Smart Cycle Discounts Pro. BOGO, tiered quantity, spend threshold, and bundle campaigns will discount the subscription product at initial checkout but will not modify renewal order line items. This is because renewal orders are generated programmatically without cart context, and those discount types require cart-level evaluation.
Can I limit a subscription discount to the first three months?
Yes, with Smart Cycle Discounts Pro. Set the renewal limit field to 3 in the campaign wizard’s discount step. The plugin tracks renewal count per subscription and stops applying the discount after three successful renewal payments. After that, renewals bill at the product’s regular price automatically โ no manual follow-up needed.
What happens if my campaign expires before a subscriber’s renewal limit is used up?
The campaign status check runs at each renewal. If the campaign has reached its end date and moved to expired status, the discount will not apply to subsequent renewals โ even if the subscriber still has remaining renewal discount entitlements. If you want the offer to run for a fixed number of renewals regardless of calendar date, set the renewal limit and leave the campaign open-ended (no end date, or a far future end date).
Does the sign-up fee discount require Pro?
Yes. The sign-up fee discount target is a Pro-only feature in Smart Cycle Discounts. The free tier applies the campaign discount to the recurring price only. The Pro tier adds the option to target the sign-up fee, the recurring price, or both โ controlled by the subscription discount target field in the campaign wizard.
Can I apply a BOGO campaign to a subscription product?
You can include subscription products in a BOGO campaign, and the BOGO logic will apply at the initial checkout โ the buy/get mechanics work normally for the first order. However, the BOGO discount will not carry through to renewal orders. Renewal orders are generated by WooCommerce Subscriptions programmatically, and the BOGO evaluation (which depends on cart quantity) does not run at renewal time. If you need the renewal discount, use a percentage or fixed-amount campaign instead.
How does Smart Cycle Discounts interact with WooCommerce Subscriptions renewal pricing if I’m on the free tier?
On the free tier, SCD discounts the subscription product price through WooCommerce’s price filters. When a subscriber signs up, WooCommerce Subscriptions captures the price at checkout for that subscription. Whether subsequent renewals use that discounted price or the product’s regular price depends on how WooCommerce Subscriptions stores and applies the subscription price โ SCD does not override that behavior on the free tier. For predictable, explicitly enforced renewal discounts, upgrade to Pro, where SCD hooks directly into the renewal order creation process.
What to remember
- Free tier applies campaign discounts to subscription product prices (product page and initial checkout). No renewal-order hooks.
- Pro tier hooks into renewal order creation and applies percentage or fixed-amount discounts to renewal line items, with renewal count tracking and configurable limits.
- Only percentage and fixed-amount discount types apply to renewals. BOGO, tiered, spend threshold, and bundle do not โ they require cart context that renewal orders don’t have.
- Campaign status gates every renewal check. If the campaign expires before the renewal limit is reached, the discount stops.
- For “first N renewals discounted” use cases: set a renewal limit and leave the campaign end date open.
If you’re deciding whether the Pro tier’s subscription controls are worth it for your store, the free vs. Pro feature comparison lists everything across both tiers. The subscription controls are one of the more meaningful Pro additions for stores that run subscription products โ but only if you need enforced renewal limits or sign-up fee targeting. If your subscription pricing is already handled elsewhere and you just want campaign discounts to show on subscription product pages, the free tier covers that without an upgrade.