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





Installation
- Upload the plugin folder to
/wp-content/plugins/, or install it from the WordPress plugin screen. - Activate the plugin. WooCommerce 9.0+ must be active.
- Go to WooCommerce > Settings > Subscriptions to configure customer permissions, reminders and payment retries.
- 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_tablescompatibility. -
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.
ContributorsTranslate “LaFactory Subscriptions for WooCommerce” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by 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_htmlfilter, 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_amountandlfsubs_renewal_line_totalfilters. 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_tokenfilter names a different one.
0.30.11
- Maintenance release.
0.30.10
- Payment-retry timing is documented and extensible through the
lfsubs_dunning_retry_timestampfilter.
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_payloadcan 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.
