Title: LaFactory Subscriptions for WooCommerce
Author: Francis
Published: <strong>September 13, 2026</strong>
Last modified: September 13, 2026

---

Search plugins

![](https://ps.w.org/lafactory-subscriptions/assets/banner-772x250.png?rev=3693360)

![](https://ps.w.org/lafactory-subscriptions/assets/icon.svg?rev=3693360)

# LaFactory Subscriptions for WooCommerce

 By [Francis](https://profiles.wordpress.org/frozange/)

[Download](https://downloads.wordpress.org/plugin/lafactory-subscriptions.0.31.2.zip)

 * [Details](https://wordpress.org/plugins/lafactory-subscriptions/#description)
 * [Reviews](https://wordpress.org/plugins/lafactory-subscriptions/#reviews)
 *  [Installation](https://wordpress.org/plugins/lafactory-subscriptions/#installation)
 * [Development](https://wordpress.org/plugins/lafactory-subscriptions/#developers)

 [Support](https://wordpress.org/support/plugin/lafactory-subscriptions/)

## Description

LaFactory Subscriptions turns any WooCommerce store into a recurring revenue machine.
It is built as a strict WooCommerce graft: native product types, native order storage(
HPOS), Action Scheduler renewals, Cart and Checkout Blocks support.

What it does, out of the box:

 * **Simple AND variable subscription products** with per-variation billing cadence
 * **Free trials and sign-up fees**
 * **Plan switching**: customers move between variations of a variable subscription
   from their account
 * **Full customer self-service**: pause, resume, skip a renewal, renew early, cancel,
   pay a failed renewal
 * **Automatic payment retries (dunning)** with configurable intervals, customer“
   Pay now” recovery
 * **Synchronized renewals**: align all renewals on a chosen day of the month or
   week
 * **Subscription length** (expire after N cycles), per-customer purchase limits,
   one-time shipping
 * **Prepaid billing**: charge several cycles upfront while keeping the underlying
   cadence explicit
 * **Subscription boxes**: quantities, fixed or selected-content pricing, and the
   same box re-shipped every cycle
 * **Memberships**: roles, protected posts/pages/blocks/REST, content drip, member
   pricing and analytics
 * **6 transactional emails**: new subscription, cancelled, expired, payment failed,
   renewal reminder, trial ending
 * **LFS Shield clone protection**: automatic renewals, retries and subscription
   emails stop on staging copies
 * **Admin dashboard** with MRR, upcoming renewals, churn, plus a full subscriptions
   list with row actions
 * **REST API** under `/wp-json/lafactory-subscriptions/v1/subscriptions` (CRUD,
   pause/resume/skip/charge/cancel, stats) and native WooCommerce **webhooks** for
   every subscription event
 * WordPress privacy export and guarded anonymization after a configurable accounting-
   retention period
 * HPOS compatible, Checkout Block compatible, theme-overridable templates

#### How it works

Subscriptions are stored as a `shop_subscription` order type (the same convention
as other major subscription plugins, so your data stays portable). Renewals are 
scheduled through Action Scheduler, which ships with WooCommerce. Payment gateways
that support tokenization (Stripe, PayPal Payments, Mollie, Square, Authorize.Net
and more) are detected automatically.

### External services

This plugin uses no third party or external service.

It contacts no server of ours or of anyone else: no license check, no activation
call, no telemetry, no analytics, no remote font, no announcement feed. Nothing 
is sent anywhere, under any condition, and there is no setting that would enable
such a call. Updates come from WordPress.org itself through the standard update 
system, under the permanent `lafactory-subscriptions` slug.

Payments are taken by the payment gateway plugin the merchant already uses (Stripe,
PayPal, Mollie and so on). Those plugins talk to their own processors under their
own terms; this plugin only asks the installed gateway to charge a saved payment
method, and never communicates with a processor itself.

For completeness: some admin screens carry a hyperlink to lafactory.com, the developer’s
own site, for documentation and support. It is a link the administrator may click,
nothing more. No request is made to that domain by the plugin, at any time, and 
nothing is sent there.

## Screenshots

[⌊Subscription product settings (billing cadence, trial, sign-up fee, length, limits)⌉⌊
Subscription product settings (billing cadence, trial, sign-up fee, length, limits
)⌉[

Subscription product settings (billing cadence, trial, sign-up fee, length, limits)

[⌊Customer subscription detail in My Account with self-service actions⌉⌊Customer
subscription detail in My Account with self-service actions⌉[

Customer subscription detail in My Account with self-service actions

[⌊Admin dashboard with MRR, upcoming renewals and churn⌉⌊Admin dashboard with MRR,
upcoming renewals and churn⌉[

Admin dashboard with MRR, upcoming renewals and churn

[⌊Subscriptions list with row actions⌉⌊Subscriptions list with row actions⌉[

Subscriptions list with row actions

[⌊WooCommerce settings tab⌉⌊WooCommerce settings tab⌉[

WooCommerce settings tab

## Installation

 1. Upload the plugin folder to `/wp-content/plugins/`, or install it from the WordPress
    plugin screen.
 2. Activate the plugin. WooCommerce 9.0+ must be active.
 3. Go to **WooCommerce > Settings > Subscriptions** to configure customer permissions,
    reminders and payment retries.
 4. Create a product and pick the **Simple subscription**, **Variable subscription**,**
    Subscription box** or **Membership** type.

## FAQ

### Does it work with the Checkout Block?

Yes. Subscriptions are created through the Store API as well as the classic checkout,
and the cart/checkout blocks display the recurring totals.

### Which payment gateways can charge renewals automatically?

Any gateway that supports tokenization or declares subscription support, including
Stripe, PayPal Payments, Mollie, Square, Authorize.Net and GoCardless. Gateways 
without tokens fall back to manual renewal: the customer receives a renewal order
they can pay from their account.

### Is it compatible with High-Performance Order Storage (HPOS)?

Yes, subscriptions and renewals are stored through the WooCommerce CRUD layer and
the plugin declares `custom_order_tables` compatibility.

### Can customers manage their own subscriptions?

Yes: pause, resume, skip the next renewal, renew early, switch plan (variable subscriptions),
cancel, and settle a failed payment, all from My Account. Each capability can be
switched off in the settings.

### Where do subscriptions appear in the admin?

WooCommerce > Subscriptions: a dashboard with MRR and renewal metrics, and a full
list with pause/resume/charge/cancel row actions.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“LaFactory Subscriptions for WooCommerce” is open source software. The following
people have contributed to this plugin.

Contributors

 *   [ Francis ](https://profiles.wordpress.org/frozange/)

[Translate “LaFactory Subscriptions for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/lafactory-subscriptions)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/lafactory-subscriptions/),
check out the [SVN repository](https://plugins.svn.wordpress.org/lafactory-subscriptions/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/lafactory-subscriptions/)
by [RSS](https://plugins.trac.wordpress.org/log/lafactory-subscriptions/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.31.2

 * The opt-in “remove everything” uninstall now sweeps product and order meta by
   prefix. A subscription box, a membership, a trial or a prepaid configuration 
   saved on a product used to survive it, because the sweep covered options and 
   user meta only. The products and the orders themselves are merchant data and 
   are left untouched.
 * An email callback declared one argument more than it accepts, and a docblock 
   named a parameter the method does not take. No behaviour change.

#### 0.31.1

 * Maintenance release.

#### 0.31.0

 * Classic checkout no longer rewrites the submitted request to force the payment
   method to be saved. The field is rendered into the form through the `woocommerce_payment_gateway_save_new_payment_method_option_html`
   filter, with a line telling the customer why a subscription saves the method.
 * The renewal token adapter installs and restores its synthetic checkout payload
   in a single place.

#### 0.30.17

 * Readme rewritten to describe this plugin only. No behaviour changes.

#### 0.30.16

 * Source comments and inline documentation reviewed throughout. No behaviour changes.

#### 0.30.14

 * Payment retries, Reports and Tools each have their own entry in the plugin menu.
 * Documentation pass across the source. No behaviour changes.

#### 0.30.13

 * Sign-up fees, recurring cart amounts and renewal totals are published as the `
   lfsubs_signup_fee_line`, `lfsubs_recurring_line_amount` and `lfsubs_renewal_line_total`
   filters. Prices are charged as contracted when nothing answers them, which is
   the default.

#### 0.30.12

 * The renewal charge uses the customer’s saved payment method. The `lfsubs_renewal_payment_token`
   filter names a different one.

#### 0.30.11

 * Maintenance release.

#### 0.30.10

 * Payment-retry timing is documented and extensible through the `lfsubs_dunning_retry_timestamp`
   filter.

#### 0.30.9

 * Fixed: admin screens painted their text in the admin background colour, so any
   box the stylesheet had not rescued individually rendered near-white on white.
   Admin text is left to WordPress.
 * The dashboard card and the plugins-list link use the brand accent rather than
   the red WordPress reserves for errors. They appear on this plugin’s own screens
   only.

#### 0.30.8

 * A member of a consolidated renewal order is billed on its own again when the 
   primary subscription is paused, cancelled or expired ; pausing, cancelling or
   expiring a subscription cancels the unpaid consolidated order it carried.
 * A manual renewal left unpaid goes on hold after a grace period (7 days by default,
   filterable) and enters the usual retry chain, instead of staying active for ever.
 * Status changes from the control center and bulk actions fire the same lifecycle
   events as the customer-facing paths, so memberships, deliveries, retries and 
   CRM connectors follow.
 * Prepaid cycles bought through an asynchronous gateway are counted from the paid
   order, as on a synchronous checkout.
 * A shop that moved to a new domain can declare itself the live site from the plugin
   screens ; Site Health reports the shield as critical while it blocks a production
   site.

#### 0.30.7

 * Fixed: a renewal paid partly with account credit was charged in full to the card
   and the credit was debited too. The order is re-read after listeners run.
 * Fixed: an immediate plan-switch adjustment, or a prepaid scheduled delivery, 
   could be picked up as the open renewal order and charged in place of the cycle,
   which then counted as paid. Only orders built as renewals qualify.
 * Fixed: a failed renewal running in the same Action Scheduler batch as a payment
   retry got no retry chain of its own.
 * Fixed: two Action Scheduler runners could both reach the gateway with the same
   renewal order. The charge runs under a per-order lock.
 * Fixed: reassigning a subscription to another customer kept the former owner’s
   saved Stripe customer and payment method.
 * Fixed: the personal-data exporter and eraser looked for a gift recipient under
   a key that was never written.
 * Fixed: moving the next payment date scheduled the reminder email twice.
 * CRM pushes and the immediate-adjustment invoice email respect the staging shield.
 * Uninstall cancels the lifecycle, pause, scheduled-delivery and bulk-control actions,
   and sweeps transients, the WooCommerce email settings and the portal return marker.

#### 0.30.6

 * Maintenance release.

#### 0.30.5

 * The opt-in “remove everything” uninstall sweeps options by prefix as well as 
   by name, so a setting added later is removed with the rest.

#### 0.30.4

 * The plan switch, the renewal order, the customer actions, the emails and the 
   subscription line meta are each published as a documented filter, and each behaves
   fully on its own defaults.

#### 0.30.3

 * The uninstall routine names only options this plugin creates.

#### 0.30.2

 * The box builder accent colour, the box builder logo and the per-product quantity
   limit on box steps are editable on the product page.
 * Fixed: membership notices, the restricted-content teaser and the `[lfsubs_member]`
   shortcode render their text correctly when it carries HTML characters.
 * The About screen describes the plugin and its features, with the same title, 
   wording and links on every install.

#### 0.30.1

 * Source comments and documentation are written in English throughout. No behaviour
   changes.

#### 0.30.0

 * The plugin has its own top-level admin menu instead of hanging its pages off 
   the WooCommerce menu. It holds the working pages, then Settings and About, so
   the subscription screens are always one click away and always named.
 * Settings opens the WooCommerce settings tab where subscription options already
   live; nothing moved, the menu simply leads there.
 * The About screen is named About in the sidebar and describes the plugin, its 
   features and its version.

#### 0.29.0

 * The product-type toggle on the product editor is served as a regular enqueued
   script.
 * Translations are served by translate.wordpress.org.
 * Product, variation and module panels save only the fields they declare, each 
   value checked against the type declared for it. A value of the wrong shape is
   refused rather than coerced.
 * Fixed: the box builder accent colour and logo were never saved, because the save
   routine tested an undefined variable.
 * Fixed: on stores using the legacy order storage, a membership could stay active
   on somebody else’s subscription.
 * The renewal payload handed to a tokenizing gateway is validated key by key, and
   third-party additions through `lfsubs_token_checkout_payload` can no longer inject
   non-scalar values.

#### 0.27.2

 * Box option prices are escaped at output after WooCommerce price markup is removed.
 * First public release on WordPress.org.

## Meta

 *  Version **0.31.2**
 *  Last updated **11 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.4 or higher **
 *  Tested up to **7.1**
 *  PHP version ** 8.1 or higher **
 * Tags
 * [recurring billing](https://wordpress.org/plugins/tags/recurring-billing/)[Recurring payments](https://wordpress.org/plugins/tags/recurring-payments/)
   [subscription](https://wordpress.org/plugins/tags/subscription/)[subscriptions](https://wordpress.org/plugins/tags/subscriptions/)
   [woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/lafactory-subscriptions/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/lafactory-subscriptions/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/lafactory-subscriptions/reviews/)

## Contributors

 *   [ Francis ](https://profiles.wordpress.org/frozange/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/lafactory-subscriptions/)