Guides /eCommerce
eCommerce

WooCommerce Subscriptions: Setting Up Recurring Payments on Your Store

July 19, 20257 min readHostBible Team

Recurring revenue changes how a business operates. Predictable monthly income simplifies planning, reduces customer acquisition pressure, and increases the lifetime value of each subscriber. WooCommerce can handle subscription billing natively, but the plugin you choose, the payment gateway you connect, and how you configure failed payment handling all determine how well it runs in practice. Setting it up correctly from the start saves significant debugging later.

WooCommerce Subscriptions vs free alternatives

WooCommerce Subscriptions is the official extension from WooCommerce.com, priced at around £179 per year. It is the most mature, most thoroughly tested, and best-supported option, with full compatibility with other official WooCommerce extensions. Features include simple and variable subscription products, multiple billing periods (daily, weekly, monthly, annually, or custom intervals), free trials, signup fees, subscriber management, synchronised renewal dates, and manual renewal options for B2B scenarios.

The main free alternative is Subscriptions for WooCommerce by WebToffee. It covers the core use cases, simple subscription products, standard billing periods, and payment gateway integration, and is sufficient for straightforward stores selling a single subscription tier. It lacks several advanced capabilities: variable subscriptions with different billing periods per variation, full subscriber management (pause, upgrade, downgrade subscriptions), synchronised renewal dates to consolidate billing on a specific day of the month, and the depth of dunning (failed payment retry) controls the official plugin provides. For a simple membership site or monthly product box, the free plugin is a workable starting point. For a complex subscription business with tiered pricing and subscriber self-service, the official extension justifies the annual cost.

Setting up a subscription product

Once the subscription plugin is installed, creating a subscription product uses the same WordPress product editor as standard WooCommerce, with additional subscription-specific fields. On the product edit page, set the product type to "Simple subscription" (one price, one set of terms) or "Variable subscription" (different price and terms per variation, useful for monthly vs annual billing tiers).

The core subscription settings to configure for each product: Subscription Price (the recurring amount), Billing Period (every 1 month, every 3 months, annually, etc.), Subscription Length (ongoing until cancelled, or for a fixed number of billing cycles), Sign-up Fee (a one-time charge at first purchase separate from the recurring amount, use this for onboarding costs or to offset initial setup overhead), and Free Trial (a number of days before the first billing cycle starts). Free trials are configurable per variation in variable subscriptions, so you can offer a 7-day trial on the monthly plan but not the annual plan.

For variable subscriptions, create the attribute (Plan Type: Monthly / Annual, for example), generate the variations, and configure subscription settings independently per variation. This allows meaningful pricing differentiation: monthly at £15/month with a 7-day free trial, annual at £120/year (equivalent to £10/month) with no free trial. Each variation stores its own price, billing period, and trial settings.

Payment gateway compatibility and automatic renewal

Automatic renewal, where the customer is charged without logging in again, requires a payment gateway that supports tokenised (stored) payment methods. Not all gateways support this. Stripe and PayPal (via the WooCommerce PayPal Payments plugin) both support it natively and are the most reliable choices for automatic subscription renewal. The gateway stores a payment token against the customer's account; WooCommerce Subscriptions uses this token when each renewal date arrives.

Configure Stripe for subscriptions: in WooCommerce → Settings → Payments → Stripe, enable "Saved cards" (which allows tokens to be stored). Confirm in your Stripe Dashboard under Settings → Customer Portal that subscription management settings align with what you want customers to be able to self-manage. For PayPal, use the WooCommerce PayPal Payments plugin (not the legacy PayPal Standard integration), only the modern integration supports billing agreements for automatic renewal.

Gateways that do not support automatic renewal fall back to manual renewal: WooCommerce emails the customer an invoice when renewal is due, and they must log in and pay manually. This is acceptable for B2B scenarios where invoice-based payment is normal, but for consumer subscriptions it creates churn from customers who ignore or miss renewal invoices. Confirm gateway support for automatic billing before building your product and pricing structure around a particular provider.

Managing failed payments and dunning

Failed payments are inevitable at scale. Cards expire, banks decline recurring charges, and payment details become outdated. WooCommerce Subscriptions handles failed renewals through a configurable retry sequence (dunning). The default retry logic attempts payment again after 1 day, then 3 days, then 5 days before suspending or cancelling the subscription. You can modify this sequence in WooCommerce → Settings → Subscriptions → Failed Payments.

At each retry failure, WooCommerce Subscriptions sends an automated email to the subscriber notifying them of the failed payment and providing a link to update their payment method via the My Account → Payment Methods page. The clarity of these emails matters significantly. An email that says "Your payment has failed" with no clear action is less effective than one that says "Your payment of £15 failed. Update your card details at [direct link] to continue your subscription." Customise the failed payment email template in WooCommerce → Settings → Emails → Customer Payment Retry.

Stripe's Smart Retries (enabled by default in Stripe's Dashboard) uses machine learning to retry failed payments at optimal times based on the bank's pattern, enabling this in conjunction with WooCommerce Subscriptions' own retry logic can further reduce involuntary churn. For stores with Stripe as their primary subscription gateway, check that Stripe Smart Retries is enabled and not conflicting with WooCommerce Subscriptions' own retry schedule.

Subscriber management

WooCommerce Subscriptions adds a Subscriptions area to WooCommerce where you manage all active and cancelled subscriptions. From here you can view each subscription's status, next payment date, and payment history; manually add or remove items from a subscription; change the subscription price; suspend or cancel a subscription on behalf of a customer; process renewals manually; and update payment methods.

Give subscribers self-service capabilities through My Account → Subscriptions. WooCommerce Subscriptions allows you to configure which actions customers can take themselves: cancelling their subscription, pausing it (if you enable this), switching between subscription tiers, and updating their payment method. Enabling self-service cancellation feels counterintuitive but reduces support requests and frustration-driven credit card disputes, a customer who can cancel in two clicks is less likely to dispute a charge. Configure self-service permissions in WooCommerce → Settings → Subscriptions.

Hosting implications for subscription stores

Subscription stores generate background processing that standard WooCommerce stores don't. When renewal dates arrive, WooCommerce Subscriptions uses WordPress scheduled events (WP-Cron or real system cron) to process payments in batches. For stores with hundreds of active subscriptions all renewing on the same day (common with synchronised renewal dates), this batch processing can be substantial, many simultaneous PHP requests, each making a payment gateway API call.

On shared hosting with limited PHP workers, renewal processing queues up and delays occur. A subscription store processing 200 renewals simultaneously needs a host with adequate PHP workers (typically 10–20 for this scale), sufficient PHP memory per request (256MB minimum, 512MB recommended), and ideally WP-CLI available for running scheduled events via system cron rather than visitor-triggered pseudo-cron. Standard WordPress cron fires only when a visitor loads a page, on a low-traffic store, renewals can be delayed by hours. Setting up a real system cron job to trigger WP-Cron every 5–15 minutes (via cPanel → Cron Jobs: */15 * * * * wget -q -O /dev/null https://yourdomain.com/wp-cron.php?doing_wp_cron) ensures timely renewal processing regardless of traffic levels.

WooCommerce hosting that handles background processing

HostBible WooCommerce plans include sufficient PHP workers, high PHP memory limits, and LiteSpeed with LSCache, configured for stores that process subscription renewals at scale.

View Hosting Plans