How a renewal actually gets charged
WooCommerce's renewal documentation says that when a renewal is due, a scheduled payment event (woocommerce_scheduled_subscription_payment) is triggered in Action Scheduler. Automatic renewals are charged through the gateway used at the original purchase. Manual renewals create a Pending payment order that the customer pays through normal checkout, and those pending renewal orders remain pending indefinitely.
If a payment fails, the default is to put the subscription on hold until the customer logs in and pays; an optional retry system can retry the charge and email the customer. Both paths need the scheduler to run on time and the customer's account and checkout pages to work for a logged-in user.
Why cron reliability is a hosting decision
Action Scheduler's FAQ says its queue is initiated by WP-Cron and the shutdown hook on admin requests, that it has no hard dependency on WP-Cron, and that it can also be run through WP-CLI. WordPress's developer documentation says WP-Cron only fires on page load: a task due at 2:00 PM can wait until 5:00 PM if nobody visits. WP Engine's support article names low-traffic sites as the most common cause of missed events.
Worked example: a course with 300 monthly subscribers renewing on the 1st sees few visits overnight. With traffic-triggered cron, the 300 renewal actions start whenever the first visitor arrives, and they compete with that visitor for PHP. With a server cron every few minutes, they start on schedule and in a predictable window. Action Scheduler also notes that several past-due actions more than a day old may indicate a problem, which is a useful daily check under WooCommerce, Status, Scheduled Actions.
| Host | Documented scheduler option | Interval |
|---|---|---|
| WP Engine | Alternate Cron toggle in User Portal, Utilities; requires WP-Cron disabled | Checks for due events every minute |
| SiteGround | Disable WP-Cron, add a cron job in Site Tools, Devs, Cron Jobs | 30 minutes suggested as fine for most sites |
| Kinsta | Add your own crontab entry over SSH, or ask support | Minimum 5 minutes |
| Liquid Web | Not documented on the plan page we read | Ask before buying |
Keep checkout, cart and My Account uncached
WooCommerce's caching guide says Cart, My Account and Checkout must be excluded from caching because they show information specific to the current customer. It lists cookies to exclude: woocommerce_cart_hash, woocommerce_items_in_cart, wp_woocommerce_session_ and woocommerce_recently_viewed, and suggests excluding _wc_session_ from database caching if your system offers it. It warns that some hosts with server-side caching may cache the account page; if password resets loop back to the login screen, ask the host to exclude it.
For a subscription store this matters twice: failed-payment customers must reach My Account to pay, and the gateway's webhook endpoint must reach PHP. Test both with a real logged-in customer account on staging.
Staging that cannot charge your customers
WooCommerce documents that Subscriptions records the URL where it is first activated and treats that as the live site. On a copy with a different URL it runs in staging mode: automatic payments and subscription emails are disabled, all subscriptions use manual renewal, and a red Staging badge appears beside the Subscriptions menu. If you first activate Subscriptions on a staging site, that site is treated as live, so activate on production and then clone. Staging mode does not stop WordPress or other plugins from sending email.
That makes host staging genuinely useful for a subscription store: SiteGround, Kinsta, WP Engine and Liquid Web all list staging on the plans in this guide. Our WooCommerce staging guide walks through checking the mode before testing.
Requirements to check before you buy
| Component | Published requirement | Source |
|---|---|---|
| WooCommerce 10.8+ | WordPress 6.9+, PHP 8.3+ (tested to 8.4), MySQL 8.0+ or MariaDB 10.6+, 256 MB WordPress memory limit, HTTPS | WooCommerce server requirements |
| WooCommerce Subscriptions | PHP 7.4+, WordPress 7.0+, WooCommerce 11.0+; compatible with HPOS and checkout blocks | Subscriptions product page |
| Subscriptions price | $279 for 1 year, or $446.40 for 2 years; 30-day money-back guarantee | Subscriptions product page |
| Kinsta per-thread memory | 256 MB per thread on Single 35k to Single 750k | Kinsta PHP docs |
Which tier fits your store
Prices are list prices read on 29 October 2026. Store sizes are planning bands, not tested capacities.
| Store stage | Sensible starting point | Published basis | Upgrade when |
|---|---|---|---|
| Launching, under a few hundred subscribers | SiteGround GrowBig with a Site Tools cron | $4.99/mo first invoice, $29.99/mo renewal; staging, daily backups | Renewal runs take long enough to slow the site, or checkout errors appear at peak |
| Growing, renewals clustered on set dates | Kinsta Single 65k or WP Engine Essential | Kinsta: 4 threads, $50/mo; WP Engine: $28/mo first year, Alternate Cron | PHP threads saturate during renewal windows or launches |
| Large or high-ticket | Kinsta Single 125k and up, or a quoted Liquid Web plan | Kinsta: 6+ threads; Liquid Web: 14 or 30 day backups, Object Cache Pro | You need longer backup retention, isolation or an SLA |
Pre-purchase checklist
- Confirm in writing how to run WP-Cron from a real server scheduler on the plan you are buying.
- Confirm cart, checkout and My Account are excluded from the host's page cache by default, and how to add your gateway's webhook path.
- Confirm PHP 8.3 is available and the PHP memory limit is at least 256 MB.
- Clone production to staging and verify the red Staging badge appears before testing anything.
- Schedule a test renewal on staging with manual renewal, and on production with a low-value test product, then watch Scheduled Actions.
- Check backup retention covers at least one full billing cycle so you can recover a bad renewal batch.
Questions before you decide
Will renewals still run if my site gets no visitors?
Action Scheduler is started by WP-Cron by default, and WP-Cron only runs on page load, so timing is not guaranteed. A server cron or WP Engine's Alternate Cron removes that dependence on traffic.
Can a staging copy charge my real subscribers?
WooCommerce documents that Subscriptions disables automatic payments and subscription emails when the site URL differs from where it was first activated. Activate on production first, then clone.
Sources & verification
Product details and prices can change. Check the linked provider before buying.
- WooCommerce: Subscriptions renewal process Accessed 29 Oct 2026
- Action Scheduler: FAQ Accessed 29 Oct 2026
- WordPress Developer Resources: Cron Accessed 29 Oct 2026
- WP Engine: WP-Cron and Alternate Cron Accessed 29 Oct 2026
- SiteGround: Replace the WordPress cron with a real cron job Accessed 29 Oct 2026
- Kinsta Docs: Cron jobs Accessed 29 Oct 2026
- WooCommerce Developer Docs: Configuring caching plugins Accessed 29 Oct 2026
- WooCommerce: How Subscriptions handles staging sites Accessed 29 Oct 2026
- WooCommerce: Server requirements Accessed 29 Oct 2026
- WooCommerce.com: WooCommerce Subscriptions product page Accessed 29 Oct 2026
- Kinsta Docs: PHP threads and memory by plan Accessed 29 Oct 2026
- Kinsta: Pricing Accessed 29 Oct 2026
- WP Engine: Plans Accessed 29 Oct 2026
- SiteGround: Shared hosting features and plan comparison Accessed 29 Oct 2026
- Liquid Web: Managed WordPress hosting plans Accessed 29 Oct 2026
Sources link directly to providers. Product buttons may use separately labeled affiliate links. Read our disclosure.