Milo Subscriptions – Subscriptions for WooCommerce and Recurring Payments

Changelog

1.8.0

  • Added: standalone plans can offer downloadable Media Library files, gated to active subscribers and listed with the [milo_subscriptions_downloads] shortcode.
  • Added: a unified “My Account” area for standalone subscribers (subscription details + downloads + licenses), available as the [milo_subscriptions_account] shortcode and the My Account block.
  • Added: standalone plans can grant a license via the Milo License Server, issued to active subscribers and revoked on cancellation; license keys appear in the account area.
  • Added: developer hooks on the standalone download endpoint (milo_subscriptions_download_allowed filter, milo_subscriptions_download_served action) so add-ons can gate or meter downloads (e.g. per-period quotas).
  • Fixed: add-on settings sections with multiple fields now have proper spacing between fields.
  • Added: a per-plan meta layer so add-ons can attach settings to standalone plans (milo_subscriptions_plan_fields filter renders fields in the plan editor; milo_subscriptions_get_plan_meta() reads them).

1.7.0

  • Fixed: the Products admin list now spans the full width like the other list screens (it was capped at 1200px).
  • Fixed: removed a dormant, mismatched internal data-store mapping for subscriptions (hardening; no behavior change).
  • Added: subscription fields now round-trip through the WooCommerce product CSV import and export.

1.6.0

  • Added: support for gateways that schedule their own recurring payments (e.g. WooPayments, Stripe Billing); Milo no longer creates a competing renewal order for them, and they can record renewals via record_external_renewal().
  • Added: one-click Health Check fixes (enable auto-renew, recalculate the next payment date, process a missed renewal, or email the customer to update payment).
  • Fixed: on the subscription detail screen, the customer email no longer overlaps the action buttons at narrow widths.
  • Fixed: the migration dry-run no longer warns about remapping to Milo Payments when the Any Gateway keep-existing-gateway path is active.
  • Added: read-only WordPress Abilities API endpoints (get, list, count subscriptions, and stats) for AI and agent tools.
  • Improved: the first-run setup wizard no longer hijacks admin pages on a site that already has subscriptions or subscription products.
  • Fixed: switch and resubscribe related orders now appear on the subscription detail screen (they were previously never returned).
  • Added: native analytics in standalone mode (active subscribers, MRR, new/canceled this month, and plan distribution), computed without WooCommerce.

1.5.0

  • Fixed: usage tracking no longer sends from local sites, even when confirmed as production.
  • Added: with the Any Gateway add-on, migration can keep a subscription’s existing gateway (via the milo_subscriptions_migrate_payment_method filter) instead of remapping to Milo Payments.
  • Improved: dry-run and verification reports now flag subscriptions that will not auto-renew because their mapped gateway is not installed or connected.

1.4.0

  • Added: import subscriptions from Flexible Subscriptions (WP Desk).
  • Fixed: Milo no longer pauses when another plugin ships a WooCommerce Subscriptions compatibility shim.
  • Added: import subscriptions from Sublium Subscriptions for WooCommerce.
  • Added: export subscriptions to JSON or CSV.
  • Added: WP-CLI commands to manage subscriptions and run migrations.
  • Added: failed background jobs are logged and shown on Health Check.
  • Improved: gateways now advertise per-feature subscription support.
  • Improved: the subscriptions REST endpoint now publishes an item schema.

1.3.0

  • Added: admin “Request payment update” action that emails the subscriber a secure link to update their payment method.
  • Added: import from YITH WooCommerce Subscription (products, subscriptions, schedule, statuses, renewal orders), with preview and rollback.
  • Added: standalone lifecycle emails (activation, payment failure, cancellation) for customers and merchant, editable in Settings > Emails.
  • Added: Products view in the Milo admin to list, create, and open subscription products.
  • Added: “Plan call to action” block pattern (Patterns > Milo).
  • Added: free trials and one-time sign-up fees on standalone plans.
  • Added: customers can change a subscription’s shipping address from My Account.
  • Added: “Plans” entry in the WordPress admin menu in standalone mode.
  • Added: all Milo blocks now live in a dedicated “Milo” block category.
  • Added: review prompt on the plugin’s own screens, 7 days after install.
  • Added: warning when a WooCommerce-only add-on runs in standalone mode.
  • Improved: migration preview now reports exact totals for the whole store.
  • Improved: standalone Plans page rebuilt on DataViews (search, sort, grid).
  • Improved: Restricted Content, My Subscription, and Subscribe Button blocks now use a native, theme-styled editor preview.
  • Improved: Health Check findings stored per subscription (no more 5,000-row cap).
  • Improved: setup wizard verifies the Milo Payments download before activating it.
  • Improved: plan switches now save the subscription fewer times.
  • Fixed: a plan switch no longer attaches to an unrelated product added to the cart.
  • Fixed: synchronized-renewal proration now follows the real schedule for quarterly and yearly plans.
  • Fixed: standalone dashboard now reports real numbers instead of zeros.
  • Fixed: the WooCommerce-mode Health Check banner no longer shows in standalone mode.
  • Fixed: migrated subscriptions correctly relink their parent order.
  • Fixed: comma-decimal amounts (e.g. “12,50”) now save correctly in the standalone plan editor.
  • Fixed: standalone nav and sidebar no longer surface WooCommerce-only add-ons.
  • Fixed: plan editor side-by-side fields are now top-aligned.
  • Fixed: the standalone Subscribe Button now uses the theme’s native button styles.

1.2.0

  • Added: migrations can now be reverted (schedule restored, renewal orders relinked, the Milo copy trashed).
  • Added: WordPress Export/Erase Personal Data tools now cover WooCommerce-mode subscriptions.
  • Added: configurable lead times for renewal, expiration, and trial-ending reminder emails.
  • Added: standalone mode reconciles against Stripe twice a day to recover from missed webhooks.
  • Fixed: the New Product modal now confirms before discarding a draft.
  • Fixed: a plan switch no longer silently replaces the recurring payment method unless it can recur.
  • Fixed: migrating an active subscription now applies the subscriber role right away.
  • Dev: the codebase is now lint-gated in CI (PHPCS + PHPStan), at zero coding-standard errors.

1.1.2

  • Fixed: the dashboard setup checklist no longer marks “Run the setup wizard” as done when the wizard is opened and then exited before finishing.
  • Fixed: editing a subscription via the REST API in standalone mode now returns a clear error instead of failing when WooCommerce is not active.
  • Fixed: migrating from WooCommerce Subscriptions now carries over each subscription’s original sign-up fee.
  • Fixed: on stores that enter prices inclusive of tax, the sign-up fee and free-trial credit are no longer taxed twice, so a free-trial cart correctly totals zero today.

1.1.1

  • Fixed: subscriptions that renew for $0 (free or fully-discounted plans) now complete the renewal automatically and keep running, instead of attempting a payment and being put on hold.

1.1.0

  • Customers can add a payment method from My Account to a subscription that has none yet (for example after importing subscriptions that need a card).
  • Restoring a subscription’s payment method now reactivates an on-hold subscription and reschedules its next renewal automatically.
  • Imported subscriptions that were already past due now resume billing instead of silently stopping.
  • Migration now carries over Stripe details stored on the original order, so imported subscriptions keep charging on their first renewal.
  • Migration now clearly explains card portability: Stripe, PayPal, Mollie, and Square transfer without interruption, while WooPayments cards must be re-confirmed once by each customer.
  • The health check now flags subscriptions whose saved card has expired, so you can ask those customers to re-authorize payment.
  • Added a “Check payment methods” action on the Health Check screen that verifies saved cards in the background and flags any that have expired.
  • Added a one-click way to email customers whose subscription needs a payment method (imported without a usable card, or expired card) a secure, sign-in-protected link to add or update their card.
  • Added customer reminder emails sent a few days before a subscription renews, expires, or its free trial ends (each can be turned on or off under WooCommerce → Emails).
  • Customers now receive a confirmation email when they switch their subscription to a different plan.
  • Fixed: the “Change payment method” action no longer dead-ends on gateways that don’t support it yet (Mollie, Square, PayPal), and the saved-card list is now limited to the subscription’s own payment provider so a card can’t be assigned to the wrong gateway.

1.0.9

  • Fixed: cancelling a subscription with prepaid time remaining no longer charges another renewal at the end of the term; the cancellation is now finalized correctly.
  • Tightened the admin header spacing on medium and small screens so it matches the desktop layout.
  • Hardened output escaping on the add-on license screen.
  • Opt-in usage tracking now uses a non-reversible random site identifier instead of a hash of the site URL.
  • Uninstall now removes all of the plugin’s options and scheduled tasks when “remove data” is enabled.
  • Subscription scheduling degrades gracefully when Action Scheduler is unavailable.
  • Removed a daily scheduled task that had no effect.
  • Stopped creating an internal database table that was never used.
  • Release packages no longer include a stray empty internal folder.

1.0.8

  • Sign-up fees are itemized as a taxable line in cart and checkout totals.
  • Admin schedule edits validate dates and reschedule the next renewal automatically.
  • Subscription switch links are hardened with nonce protection.
  • Custom email content keeps its HTML formatting and line breaks.
  • Add-on activation respects the plugin-management capability.
  • Renewals keep each subscription’s locked-in price, with an opt-in to re-price.
  • The “last payment” date reflects actual paid orders.
  • Subscription emails pause automatically on staging and development sites.
  • Subscription creation at checkout is atomic across multi-subscription orders.
  • Standalone mode loads its tables and REST routes only when enabled.
  • REST API documentation lists the exact available endpoints.
  • Customers can securely update their subscription card, with SCA/3DS and off-session setup handled by the gateway.
  • Buying several subscriptions that bill on the same schedule creates one grouped subscription.
  • The Payments screen guides you to install Milo Payments when it isn’t active.
  • The Add-ons page installs the free Milo Payments plugin in one click.
  • The block Site Editor stays available when WooCommerce is inactive.
  • Add-on cards show a “View details” button to open each add-on’s information.
  • The add-on details view shows a branded header instead of an empty screenshot placeholder.

1.0.7

  • Failed renewal recovery: the on-hold email now includes a pay link, and paying it reactivates the subscription.
  • The “Create & send invoice” action now emails Milo’s branded renewal invoice instead of the generic WooCommerce one.
  • Block cart and checkout now show the recurring subscription total.
  • Import preview notices use the native WordPress notice style, and the “Milo Payments not active” notice links to install it.
  • Free trials and other $0 first payments now save a payment method, so the first renewal charges automatically.
  • Clarified the migration FAQ: imported renewals route through Milo Payments (connect the same gateway account), and the Any Gateway add-on keeps a third-party gateway.

1.0.6

  • Import no longer requires connecting a payment gateway first.
  • Support for longer billing intervals (e.g. every 10 days).
  • Standalone mode blocks live billing on staging and development sites (test mode still works).
  • Switching a plan no longer resets the renewal date.
  • Buying a variable subscription now creates the subscription with the correct billing period.
  • Variations and Attributes tabs now always show for variable subscription products.

1.0.5

  • Fixed a conflict with WooCommerce Subscriptions when both are active.
  • Setup wizard and import improvements.
  • Standalone mode (without WooCommerce) fixes.

1.0.4

  • Fixed free-trial billing so trial products are not charged before the trial ends.
  • Improved renewal reliability.
  • Improved migration reliability.

1.0.3

  • Standalone mode (without WooCommerce) improvements and fixes.

1.0.2

  • Internationalization: the plugin is now fully translation-ready. Added missing translator comments, corrected plural string placeholders for languages with complex plural rules, and resolved all wp i18n make-pot warnings.
  • Added bundled translations for 17 locales: Arabic, Danish, German, Greek, Spanish, Finnish, French, Hebrew, Indonesian, Japanese, Korean, Dutch, Brazilian Portuguese, Russian, Swedish, Turkish, and Simplified Chinese.
  • Fixed the “Configure payments” dashboard links so they open the Payments screen correctly when Milo Payments is active.

1.0.1

  • Packaging fix: removed a stray file left over from the initial release. No functional changes.

1.0.0

  • Initial public release.
  • Subscription product type with day/week/month/year billing intervals and custom periods.
  • Free trials and sign-up fees.
  • Plan switching with prorated charges and credits.
  • Variable subscription products.
  • Mixed carts (subscription + one-off products in the same checkout).
  • WooCommerce Blocks checkout support.
  • Customer self-service portal in My Account.
  • Subscription Health Check with nightly and on-demand scanning.
  • Built-in migrator from WooCommerce Subscriptions.
  • Modern admin powered by @wordpress/dataviews.
  • REST API for subscription management.
  • HPOS compatibility.

Plugin Website
Visit website

Version:
1.8.0
Last Updated
June 26, 2026
Requires
WordPress 6.4
Tested Up To
WordPress 7.0
Requires PHP
7.4

Share Post

Join our newsletter.

Get insights into what’s happening at ChangelogWP right in your inbox. We don’t believe in spam.