WooCommerce Tips

How to Set Up a Recurring Weekly Sale in WooCommerce (That Runs Itself)

How to Set Up a Recurring Weekly Sale in WooCommerce (That Runs Itself)
🔄

WooCommerce Tips

Configure It Once. Let It Run Every Week.

The exact steps to set up a WooCommerce weekly sale that activates and deactivates automatically — no cron jobs to write, no prices to edit every Thursday night.

Every Thursday evening, thousands of WooCommerce store owners do the same thing: they open the product editor, set sale prices, and schedule an end date for Sunday. Then on Sunday night, they do it in reverse. Forty products. Twenty minutes. Every single week.

There is no native WooCommerce option to make a sale repeat. WooCommerce’s sale price scheduler is designed for one-off promotions — a start date, an end date, done. When that end date passes, the sale is over. The store has no concept of “run this every week.”

This guide is the shortest path from “running a weekly sale manually” to “never thinking about it again.” The setup takes under 10 minutes. After that, the sale activates and deactivates on its own every week, indefinitely.


Quick answer (for featured-snippet readers)

To set up a recurring weekly WooCommerce sale: install Smart Cycle Discounts (free), create a campaign, configure the Schedule step with Pattern set to Weekly, choose your active days, set start and end times, and select Continuous mode. The campaign activates and deactivates automatically every week. No manual work after initial setup. Recurring scheduling is included in the free version.

Why WooCommerce’s built-in scheduler can’t repeat

WooCommerce stores sale prices at the product level. Each product has a “Sale price” field and two optional date fields — “Sale price dates from” and “Sale price dates to.” When you set those dates, WooCommerce activates the sale price at midnight on the start date and deactivates it at midnight on the end date.

That mechanism works perfectly for a Black Friday promotion. It has no answer for “run this every Friday through Sunday, indefinitely.”

Specifically, the limitations are:

  • One date range per product. You set “starts November 28, ends December 1.” You cannot set “active every week from Friday 4 PM to Sunday midnight.”
  • Per-product, not per-campaign. There is no grouped campaign concept in core WooCommerce. Applying a recurring weekly sale to 30 products means updating 30 products every cycle.
  • No repeat trigger. When a scheduled sale ends, WooCommerce’s job is done. There is no “would you like to schedule the next occurrence?” step.

The manual cost compounds fast. A 20-product weekly sale means 40 manual operations per month (set prices, reset prices). At 50 products, that’s 100 operations. Most people manage it for six to eight weeks before something slips — a forgotten reset, a sale that ran an extra day, a price that stayed at 20% off for a week nobody noticed.

What you need before starting (2-minute check)

Before opening the campaign wizard, verify two things:

  1. Your store timezone is correct. Go to WordPress Admin → Settings → General → Timezone. Set it to the timezone your customers are in (or your own operating timezone). This is the most common source of “the sale started at the wrong time” complaints. If it’s set to UTC and your buyers are in the US Eastern time zone, “4:00 PM Friday” means different things entirely.
  2. Smart Cycle Discounts is installed. The free version from WordPress.org includes recurring scheduling — weekly, daily, and monthly patterns, both Continuous and Instances modes, no upgrade needed. If you’re already running another discount plugin that supports recurring campaigns, the setup concepts here transfer; the field names may differ slightly.

That’s it. If both are confirmed, you can complete the setup below in one session.

Step-by-step: weekly sale setup in under 10 minutes

The following steps walk through creating a weekly Friday-to-Sunday sale using Smart Cycle Discounts. The example uses a 15% percentage discount on all products — adjust the discount type, depth, and product selection to match your store.

Step 1 — Create a new campaign

In your WordPress admin, go to Smart Cycle Discounts → Campaigns → Add New. A campaign wizard opens. Give the campaign a clear, specific name — “Weekly Weekend Sale” or “Friday Flash 15%” works well. Specific names are easier to identify six months from now when you’re looking at a list of campaigns and can’t remember what “Campaign 7” does.

Step 2 — Select your products

In the Product Selection step, choose how broadly the sale applies. For a general sitewide weekend sale, choose All Products. If you want the sale to cover a specific category (say, clothing but not accessories), use Specific Products and filter by category. The “All Products” option is the fastest to configure and requires no maintenance when you add new products to your store — they’re automatically included.

Step 3 — Set the discount

In the Discount step, choose Percentage discount and enter 15. Fifteen percent is a reasonable starting point for a weekly recurring sale — noticeable enough to influence buying decisions without training customers to expect a deep discount every week. If you have specific goals (moving slow inventory, increasing AOV), the discount type section has percentage, fixed-amount, tiered, BOGO, and spend-threshold options. For a simple weekly sale, percentage keeps things clean.

Step 4 — Configure the recurring schedule

This is the key step. In the Schedule section, toggle Enable Recurring on. Set the following fields:

  • Pattern: Weekly
  • Active days: Friday, Saturday, Sunday (or whatever days match your sale window)
  • Start time: 4:00 PM on Friday (or 00:00 for start-of-day)
  • End time: 11:59 PM on Sunday
  • End condition: Never (or pick a future review date if you prefer to revisit in 3 months)

The active days setting tells the plugin which days of the week the campaign should be running. The start/end times define the window within each active day. Together, they create a recurring window: “active from Friday 4 PM through Sunday 11:59 PM, every week.”

Step 5 — Set the recurrence mode to Continuous

For a weekly sale that repeats indefinitely, choose Continuous mode. This keeps a single campaign record that toggles active and inactive on the weekly schedule. (The alternative, Instances mode, creates a separate campaign record for each occurrence — useful for monthly events where you want to compare performance month-over-month, but unnecessary overhead for a standard weekly sale. See the next section for a fuller explanation if you need it.)

Step 6 — Review and activate

In the Review step, check that the schedule summary reads correctly: pattern, active days, time window, end condition. If everything looks right, click Activate Campaign. The campaign is now live. It will become active on the next Friday at 4:00 PM (in your store’s configured timezone) and deactivate at Sunday 11:59 PM. The following Friday it will activate again, automatically, indefinitely.

Step 7 — Verify the first cycle

After the first Friday activation time, check one product from the campaign on the front end. It should show a strikethrough regular price and a discounted sale price. If the price isn’t reflecting the discount, first check the campaign status (it should show as Active on the campaign list) and then check your store’s timezone setting. A timezone mismatch is by far the most common reason a campaign appears to activate late or not at all.

That’s the complete setup. After Step 7, you don’t need to touch the campaign again. It will run on its own schedule every week until you pause it, change the end condition, or deactivate it.

Continuous vs Instances — the one decision that matters

When configuring a recurring campaign in Smart Cycle Discounts, you choose between two modes. This single choice changes how the plugin tracks and stores your campaign data.

Continuous mode keeps one campaign record. The same record activates and deactivates on a weekly schedule. Your campaign list stays clean — one entry, perpetually cycling. You can check the campaign at any time to see its current status (active or inactive), but there’s no per-occurrence breakdown. Use this for a standard weekly sale where the discount, products, and timing stay the same every week.

Instances mode creates a separate campaign record for each occurrence. Week 1 gets its own record, Week 2 gets its own record, and so on. Each record carries its own analytics. This is the right choice when you need to answer questions like “was the second week of March more effective than the first?” For a standard repeating weekly sale with no per-week variation, Instances mode adds list clutter without adding useful data. Continuous is the simpler, cleaner choice.


When Instances mode makes sense for a weekly campaign

If you plan to run A/B tests — alternating discount depths week over week to find the most effective percentage — Instances mode makes that comparison tractable. Week 1 at 15%, Week 2 at 20%, compared directly in the campaign list. For a standard set-and-forget weekly promotion, Continuous is the right call.

WP-Cron timing: will it actually fire on schedule?

Smart Cycle Discounts uses WordPress’s Action Scheduler library (the same job runner WooCommerce itself uses) to trigger recurring campaign transitions. Action Scheduler runs on WP-Cron, which means it depends on site traffic to execute.

Here is what that means in practice for a weekly sale:

High-traffic stores (100+ daily visitors): WP-Cron fires frequently throughout the day. A 4:00 PM Friday activation will trigger within a few minutes of the scheduled time. For most stores, this is accurate enough that customers won’t notice any delay.

Lower-traffic stores (fewer than 50 daily visitors): WP-Cron fires only when someone visits the site. If Friday 4 PM is a quiet period, the activation might fire at 4:25 PM or 5:10 PM — whenever the next visitor arrives and triggers a cron check. For a general weekend sale, a 30-minute delay is usually inconsequential. For a sale you’re promoting as starting “at 4 PM sharp” in an email, it matters more.

If timing precision matters for your business, the reliable fix is a server-side cron job. Most hosting control panels (cPanel, Plesk, your hosting dashboard) have a cron job scheduler. Add a job that calls wp-cron.php every 5 minutes:

*/5 * * * * wget -q -O- https://yourstore.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

With that in place, WP-Cron fires every 5 minutes regardless of traffic, and your weekly sale activation will be within 5 minutes of the configured time. The full WP-Cron guide explains the mechanics in more detail if you’re setting this up for the first time.


One timezone detail that trips people up consistently

Smart Cycle Discounts reads the timezone from your campaign settings, which defaults to the WordPress site timezone (Settings → General → Timezone). If your site is set to UTC — which is the default for new WordPress installs — and your buyers are in New York, “Friday 4:00 PM” in the campaign means 4:00 PM UTC, which is 12:00 PM Eastern. Set the timezone first. Check it every time you see unexpected activation timing.

Three things that cause weekly sales to underperform

The setup above gets the campaign running. These are the operational mistakes that make a technically-correct recurring sale underperform or create friction over time.

Discount depth that trains customers to wait

A weekly sale that runs at 25–30% off every single weekend, indefinitely, eventually becomes the normal price in the eyes of your regular customers. They stop buying at full price. They wait for the weekend. You’ve trained them to do this without intending to.

Weekly recurring promotions work best at 10–15%. That’s meaningful enough to notice and act on, but not so deep that customers feel cheated paying full price during the week. If your margin requires a deeper discount to make the campaign worthwhile, consider running it less frequently — bi-weekly, or a genuine monthly event — rather than going deeper every week. The guide on discount fatigue in WooCommerce stores covers this dynamic in more detail.

Running it alongside conflicting campaigns

If you already have other active campaigns — a spend-threshold deal, a BOGO promotion, a new-customer discount — you need to check how they interact with the weekly sale. Two active campaigns targeting the same product can stack in unexpected ways depending on your priority settings.

Smart Cycle Discounts uses a 1–5 priority scale (5 is highest) to resolve conflicts when multiple campaigns compete for the same product. Before activating a new recurring campaign, set its priority explicitly. Don’t leave it at the default and assume the behavior you want. A brief explanation of how the priority system works is in the campaign priority documentation.

Forgetting to pause the campaign during major promotions

Your weekly 15% sale running in the background during a Black Friday 40% promotion can interfere with the experience in subtle ways — particularly if you’re using Continuous mode and the weekly campaign happens to be active during the sale window. The easiest prevention: before any major promotional event, open the recurring campaign and set its status to Paused. The campaign record and all settings are preserved; it just skips occurrences while paused. Reactivate it after the event and it picks up the weekly schedule from the next occurrence forward.

FAQ

Can I set up a recurring weekly sale in WooCommerce without a plugin?

Not through the standard admin interface. WooCommerce’s built-in sale price fields support a single fixed date range per product — there is no repeat option. You could write custom PHP using WP-Cron hooks to trigger price changes on a schedule, but that requires developer skills, ongoing maintenance as WooCommerce updates, and doesn’t scale cleanly to many products. For most store owners, a dedicated campaign plugin is the practical path.

Is recurring scheduling free or Pro in Smart Cycle Discounts?

Recurring scheduling is included in the free version of Smart Cycle Discounts. Weekly, daily, and monthly patterns are all available without upgrading, as are both Continuous and Instances modes. You can verify this on the free vs Pro features page.

Does the weekly sale apply to variable products and their variations?

Yes. When a campaign targets a variable product, all of its variations receive the discount automatically. The strikethrough sale price displays on the product page and on individual variation selectors. You don’t configure each variation separately — the campaign covers the parent product and its children in one step.

What happens if I add new products after setting up the recurring sale?

If you used the “All Products” selection mode, new products are included automatically — the campaign applies to every product in your catalog at the time it activates, including any added since the campaign was created. If you used a specific product list, new products are not included until you manually add them to the campaign’s product selection. All Products mode is the lower-maintenance choice for a broad weekly sale.

How do I pause the weekly sale for a specific weekend without deleting it?

Set the campaign status to Paused in the campaign list (the three-dot menu on the campaign row has a Pause option). The campaign skips all occurrences while paused. When you reactivate it, it resumes the weekly schedule from the next occurrence forward. No settings are lost. This is the recommended approach for pausing during major promotions like Black Friday, where you want the weekly sale out of the way temporarily.

Can I change the discount percentage after the campaign is already running?

Yes. Open the campaign, edit the discount step, and save. The change takes effect at the next activation window. If the campaign is currently active, the updated discount applies immediately on the live site. If it’s in its inactive window between weekends, the new rate will be applied when the campaign next activates on Friday.

How precisely does the campaign activate at the scheduled time?

Smart Cycle Discounts uses WordPress Action Scheduler to trigger campaign transitions — the same reliable job runner WooCommerce uses for order processing. On a site with normal traffic, activation typically fires within a few minutes of the scheduled time. On low-traffic sites, it fires when the next visitor triggers WP-Cron, which could add 15–45 minutes. For timing-critical promotions, set up a server cron job to call wp-cron.php every 5 minutes — your hosting control panel almost certainly has this option.

Will the weekly sale show strikethrough prices on the shop page automatically?

Yes. Smart Cycle Discounts applies discounts through WooCommerce’s price filters at display time, which means the theme’s native “Sale!” badge and strikethrough pricing render automatically on shop, category, product, and search pages — the same visual treatment as a native WooCommerce sale price. This happens without any additional configuration. Note that WooCommerce’s built-in “On Sale” product filter (used in some shortcodes and third-party filter plugins) reads stored sale data from the database, not the filtered display price, so campaign-discounted products may not appear in those filters — this is a known limitation shared by all runtime-based discount plugins.


Key Takeaways

  • WooCommerce has no native “repeat” option for scheduled discounts — recurring weekly sales require a campaign plugin
  • Smart Cycle Discounts includes recurring scheduling (weekly, daily, monthly) in the free version — no upgrade needed
  • For a standard weekly sale: Pattern = Weekly, choose active days, set start/end times, select Continuous mode — configured once, runs forever
  • Set the store timezone correctly before activating — Settings → General → Timezone — a wrong timezone is the single most common source of activation timing errors
  • Continuous mode = one campaign record, repeats on schedule; Instances mode = separate record per week (use for A/B tests or per-week analytics, not for standard repeating sales)
  • WP-Cron fires on site traffic, not a true clock — for precise timing, add a server cron job that calls wp-cron.php every 5 minutes
  • Keep weekly recurring discounts at 10–15%; deeper recurring discounts train customers to wait for sales rather than paying full price
  • Pause the recurring campaign before major promotions (Black Friday, seasonal events) so it doesn’t interfere — resume it afterward, settings intact

Set it up this week

Smart Cycle Discounts includes recurring campaign scheduling — weekly, daily, and monthly patterns, both modes — in the free version. One setup. Runs itself from there.

Webstepper

The Webstepper Team

WordPress Plugin Developers

We’re a husband-and-wife team building WordPress tools that solve problems we faced ourselves running online stores. Our plugins are built from experience — no guesswork, just practical solutions.