WooCommerce Tips

How to Set Up a Recurring WooCommerce Discount Campaign That Runs Itself

How to Set Up a Recurring WooCommerce Discount Campaign That Runs Itself


WooCommerce Tips · Scheduling & Automation

The WooCommerce Sale That Runs Itself

Configure a recurring discount once — a Weekend Sale, a monthly members offer, a weekly flash deal — and watch it activate and expire on its own schedule, every time, without a calendar reminder or a 6 am alarm.

Most WooCommerce stores have at least one promotion they run on repeat. A Weekend Sale. A first-of-the-month offer for subscribers. A Friday Flash Deal that goes live at noon and ends Sunday night. The schedule never changes — only the specific dates do, because you’re manually updating them each time.

That manual work is easy to underestimate. Setting the start date, setting the end date, activating the campaign, remembering to deactivate it, doing it all again next week. Over a year, a weekly promotion means 52 rounds of this. It doesn’t take long, but each instance is a small opportunity to get the dates wrong, forget the activation, or leave a sale running three days past its end.

Smart Cycle Discounts includes recurring campaign scheduling in its free version. You configure the discount once — products, discount type, time window, pattern — and the plugin handles every subsequent cycle automatically, from activation to expiration. This guide explains how that system works and how to set it up correctly.

Why recurring matters more than a start date and end date

A one-time campaign with a start date and end date solves a real problem: you configure it in advance and don’t have to stay up until midnight to flip the switch. That’s already a significant improvement over editing product prices manually, and it’s covered well in the guide on how to run a WooCommerce flash sale without staying up until midnight. But a one-time campaign still requires a new setup for every new promotion window.

Recurring campaigns are different in kind, not just in degree. The campaign remembers its own schedule and re-applies it without any input from you. A “Weekend Sale” becomes a permanent feature of your store — a known, expected thing that customers start to anticipate — without it occupying any of your attention week to week.

This shift matters most for promotions with a predictable cadence. Flash deals that happen on a fixed day. Monthly loyalty offers. Seasonal recurring events. Once you’ve built the campaign logic once, there’s no good reason to rebuild it every time the calendar turns over.

The two recurring modes and when to use each

Smart Cycle Discounts uses two fundamentally different engines for recurring campaigns, and understanding the distinction helps you pick the right one from the start.

Continuous mode

In continuous mode, the plugin stores the recurrence pattern alongside a single campaign record. When the discount engine runs, it checks the campaign’s pattern — daily, weekly, monthly — and the campaign’s daily time window (start time and end time), then decides in real time whether the campaign should be active right now. There are no child campaign records, no materialized instances. The campaign either matches the current moment or it doesn’t.

This is the right choice when:

  • The promotion is truly open-ended — a standing wholesale price, a subscriber benefit, a weekend sale that runs indefinitely until you decide to stop it
  • You want the simplest possible setup with the least administrative overhead
  • You don’t need to know in advance exactly when the campaign will stop

The trade-off is visibility. Because no future instances are pre-generated, you can’t look at a calendar and see “here are the next 12 dates this campaign runs.” You know it will run on its pattern; you just don’t see a list.

Instances mode

In instances mode, the plugin generates a concrete occurrence list when you save the campaign. Each future occurrence is a scheduled job — the occurrence runs on the expected date, materializes a child campaign for that specific window, and that child activates and expires like any one-time campaign. The parent campaign is the template; the instances are the individual run records.

This is the right choice when:

  • You want to run the promotion a fixed number of times and have it stop automatically (“run this 12 times, then retire it”)
  • You want to review the full occurrence schedule before it goes live
  • You’re running a campaign series with a defined arc (a 10-week flash sale program, for example)

The trade-off is that instances mode needs a bit more configuration upfront — you’re telling it not just how to repeat but how many times. And if you change the campaign settings later, the occurrence cache regenerates from the new configuration, so existing future occurrences are updated too.


What powers the timing

Smart Cycle Discounts uses WordPress’s ActionScheduler library (also used by WooCommerce itself) to fire recurring job events. This is a server-side queue, not a client-side timer — so the campaign runs on the server’s schedule regardless of whether anyone is browsing the store. There’s no cron job you need to configure manually; the plugin registers its own scheduled events on activation.

Daily, weekly, monthly: what each pattern actually controls

Both recurring modes support three recurrence patterns. The pattern determines the rhythm of the campaign. Combined with the start time, end time, and interval settings, you get precise control over when each cycle begins and ends.

Daily

The campaign activates based on a daily time window. The start time and end time you configure define the daily active window — “active from 12:00 PM to 11:59 PM” means the discount is live every day during that slot. A daily pattern with an interval of 1 means every day; an interval of 2 means every other day (supported in instances mode).

Use daily for flash deals with a fixed daily time window — a lunchtime deal, a morning sale, an overnight clearance.

Weekly

The campaign activates on specific days of the week. You select which days — Monday through Sunday, one or more — and the plugin checks whether today’s day of the week matches any of the selected days before deciding the campaign is active. If you leave the days-of-week selection empty, the campaign matches all days (which makes it identical to daily).

Use weekly for Weekend Sales, Monday promotions, mid-week deals. The most common setup: select Saturday and Sunday, set a start time of Friday 5 PM and end time of Sunday 11 PM, and you’ve built a Weekend Sale that fires every week without any further setup.


Overnight time windows work

If your end time is earlier in the clock than your start time — say, “start 10:00 PM, end 6:00 AM” — the plugin detects this as an overnight window and handles it correctly. The discount is active if the current time is after the start time or before the end time, rather than requiring both. You don’t need to split it into two separate campaigns.

Monthly

The campaign activates on specific days of the month — the 1st, the 15th, the last Friday, whatever you configure. The days-of-month setting works the same way as days-of-week in the weekly pattern: select one or more calendar dates, and the plugin activates the campaign on those dates each month.

Use monthly for first-of-month loyalty offers, mid-month promotions, payday deals (the 25th, for instance), or any promotion with a fixed monthly anchor date.

Three ways to stop a recurring campaign

Every recurring campaign needs an end condition — or an explicit instruction that it has none. Smart Cycle Discounts supports three.

Never (run until manually stopped)

The campaign runs on its pattern indefinitely. You stop it manually by pausing or deactivating it from the campaign list. This is the default and the most common choice for standing promotions — a wholesale price, a subscriber benefit, a Weekend Sale you intend to keep running for the foreseeable future.

After a fixed number of occurrences

You specify a count — “run 10 times” — and the campaign stops after that many cycles. This is only meaningful in instances mode, where the plugin pre-generates that exact number of occurrence records and stops scheduling new ones after the last is consumed. Good for a defined campaign series with a clear arc.

On a specific end date

The campaign runs on its pattern until the end date you specify, then stops. The end time on the end date is 23:59:59 — the campaign is still eligible to run on the end date itself, but not after. Use this when you know a promotion has a season (a summer sale that runs every weekend until Labour Day, for example).

Setting up a recurring campaign, step by step

Recurring settings live inside the campaign wizard’s scheduling step. You configure the core campaign first — products, discount type — and then reach the schedule step where you enable recurrence.

Build the campaign as normal

Start a new campaign in Smart Cycle Discounts and work through the first steps: name the campaign, choose your product targeting (all products, specific products, categories), and configure the discount type. Percentage off, fixed amount, and BOGO are all available in the free version. The recurring setting doesn’t change any of this — it just controls how many times the campaign runs.

Reach the scheduling step and set your time window

In the scheduling step, set the start date, start time, end date, and end time for a single cycle of the promotion. This defines how long each individual occurrence runs — from Friday 5 PM to Sunday 11 PM, for instance. The recurring settings you add next will tell the plugin to repeat this window on a schedule rather than treating it as a one-time event.

Enable recurring and choose your mode

Toggle recurring on. You’ll be prompted to choose between continuous mode and instances mode. If you’re building a standing promotion (no planned end, or an end date sometime in the future), choose continuous. If you’re building a defined series and want the plugin to pre-generate the occurrence list, choose instances and set the count.

Set the pattern and end condition

Choose daily, weekly, or monthly. If weekly: select the days of the week you want the campaign active. If monthly: select the day(s) of the month. Then set the end condition — never, after a count, or on a date. If you chose “after a count” and are in continuous mode, note that the count-based end condition is primarily designed for instances mode.

Review and launch

The wizard’s review step shows a summary of the full campaign before you go live. Confirm the discount, the products it covers, the schedule, and the recurrence settings. Then launch. The campaign goes active and will manage its own lifecycle from here — activating each cycle, expiring at the window’s close, and reactivating at the next cycle’s start.

Edge cases worth knowing before you go live

Recurring campaigns are mostly set-and-forget, but a few behaviors are worth understanding so they don’t surprise you.

The campaign activates at the pattern’s match, not the start date

In continuous mode, the plugin’s check is: “does the current moment match this campaign’s pattern and time window?” It runs this check independently of which historical cycle you’re on. If you edit a continuous campaign’s time window after it’s been running for months, the new window takes effect immediately — there’s no backlog of old instances to worry about.

Editing a campaign in instances mode regenerates the occurrence cache

If you change the pattern, interval, count, or end date of a campaign running in instances mode, the plugin cancels the existing scheduled events and regenerates the occurrence cache from your new settings. Future occurrences update; past ones (already run) are unaffected. This is usually what you want — a corrected configuration applies going forward — but it means a mid-series edit will recalculate the remaining occurrences, not just append more.

The discount applies at display time, not in stored sale data

Smart Cycle Discounts applies discounts through WooCommerce’s price filters at render time, not by writing a stored sale price to each product. This means sale badges and strikethrough pricing display correctly on your shop and product pages during each cycle, but the products won’t appear in WooCommerce’s native “On Sale” block or shortcode, which reads stored _sale_price data rather than the filtered price. For recurring promotions this is almost never a problem — you’re running a campaign, not permanently marking products on sale — but it’s worth knowing if you also rely on WooCommerce’s built-in “On Sale” widget to surface discounted products.


Timezone matters — set it correctly

The recurring handler runs all time-window checks in the campaign’s configured timezone (falling back to your WordPress timezone setting if none is specified). If your WordPress timezone is set to UTC but your “5 PM Friday” window is meant for your local time zone, your campaign will fire five hours off — or however large the offset is. Set your WordPress timezone to your store’s local time in Settings → General → Timezone before configuring time-sensitive recurring campaigns. This is covered in more detail in the timezone configuration documentation.

Pausing a recurring campaign mid-cycle

If you manually pause a recurring campaign while it’s mid-cycle (the discount is currently live), the discount stops applying immediately. When you resume the campaign, it re-enters the continuous check loop and will activate again the next time a cycle’s window opens. It doesn’t retroactively extend the current cycle to make up for the paused time.

Three recurring campaigns you can run today

These aren’t hypothetical use cases — they’re the three patterns that show up most often among store owners once they’ve discovered the recurring scheduler.

The Weekend Sale

A weekly sale that runs from Friday evening through Sunday is one of the most common recurring promotions in WooCommerce. It creates a predictable rhythm customers start to expect, which is itself a retention mechanism — regulars learn the cadence and plan around it.

Setup: Create a campaign with your discount (10-15% off your main category is typical). In the schedule step, set the daily time window from Friday 5:00 PM to Sunday 11:59 PM. Enable recurring, choose continuous mode, set the pattern to weekly, and select Friday, Saturday, and Sunday as the active days. End condition: never. Once it’s live, it runs every weekend without any further input.

If you’re pairing a Weekend Sale with a coupon code — so customers see the promotion but need a code to claim the full discount — see the guide on coupon-code campaigns, which explains how any discount type in Smart Cycle Discounts can be gated behind a code.

The monthly subscriber offer

A monthly discount for registered subscribers or loyalty members runs on the 1st (or whatever anchor date you pick) and creates a compelling reason for customers to stay on your email or member list. Combined with role-based targeting — which lets you aim the discount exclusively at a specific WordPress user role — it becomes an invisible members-only perk that requires no coupon code and no customer action beyond being logged in.

Setup: Create a campaign targeting your subscriber or member role (role targeting is free). Set a time window for the first weekend of the month, or all of the 1st. Enable recurring, choose monthly, and select day 1 of the month. End condition: never. The discount fires each month on the 1st without you touching anything. If you haven’t set up role-based targeting yet, the guide on WooCommerce role-based discount campaigns walks through the Include/Exclude targeting setup in detail.

The defined flash sale series

A campaign series is a different beast: you’re running a promotion on a repeating schedule, but you want it to end after a set number of runs — a 12-week promotional calendar, a pre-holiday series, a limited-run clearance event.

Setup: Create your campaign and enable recurring in instances mode. Set the count to however many occurrences you want — 8 weekly sales, 3 monthly events, 30 daily deals. The plugin generates the full occurrence list on save, schedules the materialization events for each, and stops automatically after the last one runs. You can review the occurrence list before launching to confirm the dates line up with your promotional calendar.

Key takeaways


Key takeaways

  • Recurring scheduling is free in Smart Cycle Discounts — daily, weekly, and monthly patterns, with overnight time windows, are all included without a Pro upgrade.
  • Continuous mode is the simplest choice for standing promotions. The plugin checks the pattern at runtime, no child instances are created, and you stop it manually when you’re done.
  • Instances mode pre-generates the full occurrence list, which is useful when you want a defined run count or want to inspect future dates before launching.
  • The three end conditions — never, after N occurrences, on a specific date — cover most promotional calendars. “Never” with a manual stop is the most common.
  • Weekly patterns let you select specific days of the week (e.g., Friday, Saturday, Sunday for a Weekend Sale). Monthly patterns let you select specific dates of the month.
  • Overnight time windows are handled correctly — if your end time is earlier than your start time, the plugin treats it as a cross-midnight window, not a mis-configuration.
  • Set your WordPress timezone correctly before configuring time-sensitive recurring campaigns — the recurring handler uses it to resolve “5 PM Friday” to the right UTC timestamp.

Common questions

Can I change the discount percentage on a recurring campaign without breaking the schedule?

Yes. Editing the discount amount or type updates the campaign going forward. In continuous mode the change is immediate — the next time the time window is active, the new percentage applies. In instances mode, any in-progress occurrence finishes under the old configuration; subsequent occurrences use the new settings. The occurrence cache is only regenerated if you change the schedule settings (pattern, interval, days, count, or end date), not if you only change the discount itself.

What happens if two recurring campaigns run at the same time on the same products?

Smart Cycle Discounts uses a priority system to resolve overlapping campaigns. The campaign with the higher priority number wins. If two campaigns have equal priority, the higher discount is applied. You can set priority per campaign from the campaign list — the documentation on campaign priority explains the resolution order in detail. Campaign Intelligence also flags priority conflicts as a health warning before you launch, so you can catch them in the wizard.

Does a recurring campaign work alongside WooCommerce native coupons?

Yes. Smart Cycle Discounts campaigns and native WooCommerce coupons operate independently — campaigns apply as a sale price at display time, coupons apply at checkout as a separate deduction. A customer can see a campaign’s discounted price and also enter a coupon code at checkout; both apply. If you want to prevent coupon stacking on campaign prices, WooCommerce’s native coupon restriction settings (on each coupon) let you exclude products already on sale.

How far in advance does the plugin schedule occurrences in instances mode?

When you save a campaign in instances mode, the plugin generates the full occurrence cache for all future instances — up to the count you specified. It then checks for due occurrences 24 hours ahead and schedules the corresponding ActionScheduler events. This rolling look-ahead means the system is always prepared for the next occurrence without holding all future timestamps in memory indefinitely.

Can I use a recurring campaign with BOGO or a fixed-amount discount, not just percentage?

Yes. The recurring mode is a scheduling layer — it controls when the campaign runs, not what kind of discount it applies. Any discount type available in the free version (percentage off, fixed amount, BOGO) and any Pro discount type (tiered pricing, spend thresholds, bundles) can be configured as recurring. The scheduling step is the same regardless of which discount type you chose earlier in the wizard. If you want to run a recurring bundle offer — a monthly gift set or a weekly starter kit deal — the WooCommerce bundle discount setup guide explains the three bundle pricing modes before you reach the scheduling step.

Build your first recurring campaign

Smart Cycle Discounts includes recurring scheduling — daily, weekly, monthly, continuous or instances — in the free version. Set it up once and walk away.

Webstepper author avatar

Webstepper

WooCommerce operator & plugin developer

We build Smart Cycle Discounts and TrustLens, and we write about the real decisions that go into running a WooCommerce store — not the easy ones.