WooCommerce Subscriptions 9.3.0
WooCommerce Subscriptions enables businesses to offer subscription-based products and services, generating reliable recurring revenue. With the ability to set flexible subscription intervals, this plugin simplifies the management of recurring payments for physical, virtual, and downloadable products. Instant download is available with membership, ensuring you stay updated with the latest features.
Out of stock
Description
WooCommerce Subscriptions — download
Download WooCommerce Subscriptions free with SrmehranClub membership. Exact files as listed on the official site. No license keys or author support. GPL pre-activated.
Woocommerce subscriptions plugin free download with membership
Unlock the potential of recurring revenue with WooCommerce Subscriptions. This powerful extension empowers your WooCommerce store to effortlessly manage and automate subscription-based products and services.
**Features and Benefits:**
– **Flexible Subscription Options:** Offer a variety of plans, including daily, weekly, monthly, or yearly subscriptions tailored to meet your customers’ needs.
– **Automated Billing:** Streamline your payment process with automatic renewals, ensuring consistent cash flow and reducing administrative overhead.
– **Customer Management:** Easily manage subscriber accounts, allowing customers to update their payment methods and subscription details with just a few clicks.
– **Comprehensive Reporting:** Gain insights into your subscription metrics, helping you make informed decisions to grow your business.
– **Discounts and Trials:** Attract new customers by offering free trials or discounted initial periods, encouraging them to experience your offerings without commitment.
WooCommerce Subscriptions is ideal for businesses looking to create a steady stream of income, including e-commerce shops, content creators, and service providers. Whether you’re launching a new subscription box, membership site, or digital service, this tool is essential for success.
Get WooCommerce Subscriptions at an unbeatable price from srmehranclub GPL site and start transforming your business today!
Changelog
From changelog.txt in the download
Improved
- When wcs_get_early_renewal_url() is called in the logged-in request of the subscriber or the gift recipient, the URL now carries a nonce in the 'woocommerce_subscriptions_early_renewal_nonce' query arg, and WCS_Cart_Early_Renewal::maybe_setup_cart() requires it before it sets up the cart. Build a URL of your own with WCS_Cart_Early_Renewal::NONCE_QUERY_ARG and WCS_Cart_Early_Renewal::get_nonce_action( $subscription_id ).
- Percentage-based Product Add-Ons on 'Override price' plans are worked out from the plan's own price before the
wcsatt_subscription_scheme_pricesfilter runs, so a callback that scales prices is applied once to plan price plus add-on. A callback that adds a fixed amount is not reflected in the add-on percentage. - Added WC_Subscription::maybe_cancel() with manual note attribution and deprecated WC_Subscription::cancel_order(), which now emits a deprecation notice before forwarding to it. Subscriptions' own cancellation paths now call maybe_cancel(), so an override of cancel_order() in a subclass no longer runs for them.
- Added WCS_Download_Handler::revoke_subscription_download_permissions( $product_id, $subscription ), which revokes a product's download permissions on a subscription for every user who holds them. Subscriptions' own revocation paths now use it; revoke_downloadable_file_permission() is unchanged.
- Deprecated WC_Subscription_Downloads_Products::save_simple_product_data(), which was unhooked in 8.3.0 alongside its two siblings. Use WC_Subscription_Downloads_Products::handle_product_save().
Fixed
- Gifting security improvements:
- A recipient paying a renewal or renewing early through the checkout no longer replaces the purchaser's billing name, email and address on the subscription. The shipping address still updates to what the recipient enters.
- On the classic checkout, a recipient now sees their own billing details instead of the purchaser's. Previously, submitting the form unchanged saved the purchaser's contact onto the recipient's own account.
- Saving My Account > Account details with the renewals billing contact box ticked no longer writes the recipient's name and email onto subscriptions gifted to them, which sent the purchaser's renewal invoices to the recipient.
- A recipient can no longer open or submit the billing address form for a gifted subscription. They can still change its shipping address.
- When a downloadable product is removed from a gifted subscription, or the subscription is switched away from it, the recipient's download links now stop working. Previously they kept working.
- Early renewal security and double-charge protections:
- Two early renewal requests arriving together for the same subscription, such as a double-click on Pay now or a browser prefetching the link, no longer charge the payment method on file twice for one billing period.
- A Pay now link stops working once its renewal order has been paid or is awaiting payment confirmation, so following it again does not charge again. Links issued before this release also stop working. Opening the subscription from My Account > Subscriptions issues a fresh one.
- An early renewal link that was not issued in the customer's own logged-in session, including the one in a renewal reminder email, now takes them to their subscription to choose whether to renew, instead of emptying their cart and sending them straight to checkout.
- Paying pending or failed renewal orders through checkout now preserves product subtotals before tax and keeps the order's coupon discounts in sync with checkout.
- Category-restricted coupons no longer discount products outside their selected categories when customers pay a pending subscription order.
- Customers who log in at checkout while paying a renewal are no longer charged twice for the product when their cart also held the same subscription product added separately.
- The 'woocommerce_subscriptions_disable_manual_renewal_stock_validation' filter once again lets customers pay a manual renewal for an out of stock product.
- A subscription switch the store no longer allows is now refused when the order is placed, on the block checkout as well as the classic one.
- Adding a cart to an existing subscription no longer fails with "Your cart cannot be added to subscription" when the cart item is on a plan created in the Subscriptions plans screens since 9.0.0.
+17 more
- Percentage-based add-ons are now charged on top of subscription plans that set their own price, instead of being dropped from the cart total.
- Subscription plan prices on Product Bundles and Composite Products no longer show placeholder values on stores where the bundle or composite script loads before ours.
- Removing a line item by link now follows the same rules as the remove control in My Account > Subscriptions. The last remaining item, items on a subscription that is not active, on hold or pending, and items an extension marks as unremovable, such as a bundle's child items, can no longer be removed this way.
- Undoing an item removal from My Account no longer fails with a critical error on some stores with a persistent object cache, which left the subscription total and later renewals at the reduced amount.
- Stale download permissions for removed subscription products are now cleared when permissions are regenerated.
- A subscription switch that keeps the same product, such as a quantity change, no longer removes the customer's access to its downloadable files.
- Saving a product's Subscription Downloads links now only changes links to products you have permission to edit. Changes to any other product are refused and its existing links are kept.
- Saving a subscription product whose linked downloadable product has since been deleted no longer fails with a fatal error, and clears the stale link.
- Subscription status notes created by the Cancel bulk action now identify the administrator who performed it instead of appearing as system notes.
- Sorting the Subscriptions list by Last Order Date no longer takes tens of seconds on stores with thousands of subscriptions.
- Setting a subscription or renewal order line item's quantity to zero in the admin no longer fails with a fatal error on stores that enter prices inclusive of tax.
- Saving an order or subscription in the admin can no longer change the recorded base location tax on another order's line items.
- Linking a subscription to a parent order that does not exist, or that you cannot edit, now shows an error instead of a fatal error or a silent link.
- The PayPal out-of-date subscription ID notice and IPN failure notice can now only be dismissed by an administrator from the notice itself. Previously any logged-in user could hide either one with a crafted link.
- A subscription's next payment date is no longer pushed forward by an extra billing period when it is recalculated before any order is dated on or after the subscription's start date.
- Dedicated processing now tracks its turn counter in the database only, so a stale object cache can no longer stop scheduled actions from running. If the counter cannot be saved, dedicated processing turns itself off instead of stalling.
- Payment retry lookups, Subscriptions health check runs, and WooCommerce Tracker telemetry now work on hosts whose database layer does not support the '%i' identifier placeholder in prepared queries, such as on WordPress.com.
Show 5 earlier versions
Version 9.2.04 improved23 fixed
Improved
- We've redesigned the WooCommerce Subscriptions settings page — a single-column layout with clearer labels and inline help:
- Early renewal payments are now on by default on stores that never saved the "Allow early renewal payments" setting. Turn it off under WooCommerce > Settings > Subscriptions.
- "Turn off automatic payments" now requires "Accept Manual Renewals" to be enabled.
- "Suspensions per Billing Period" is now a number field instead of a dropdown.
- "Switch Button Text" now defaults to "Switch" for new stores.
- Gifting is now set per product instead of storewide. A background migration carries the storewide default onto existing products, so they keep their current behavior; new products are off by default.
- A new bulk edit action on the Products screen enables or disables gifting across multiple products at once.
- When a subscription's scheduled event – a renewal payment, payment retry, trial end, expiration, end of prepaid term or customer notification – is cleared and not replaced, the failed-scheduled-actions log now records which subscription and event were affected and when the event should have run. Previously nothing in the WooCommerce logs identified the subscription, so a subscription left with a date and no scheduled action could only be found by hand.
- Add to Subscription now shows the same "cannot be edited" notice whether a subscription does not exist or belongs to another customer, instead of naming permission as the reason.
- Developer-facing changes:
- Deprecated 'woocommerce_subscriptions_max_customer_suspension_range'. The redesigned suspension controls have no option list; the new settings support any number of suspensions.
- Deprecated WCSG_Admin::get_gifting_option_text() and WCSG_Admin::get_gifting_global_override_text(). Both described the removed storewide gifting default and nothing in the plugin renders their output anymore.
- Deprecated WC_Subscriptions_Admin::add_subscription_settings_tab(). The Subscriptions tab is now registered as a WC_Settings_Page on 'woocommerce_get_settings_pages' rather than through 'woocommerce_settings_tabs_array'. The method now logs a deprecation notice when called, but still adds the tab, so third-party code that hooks it to 'woocommerce_settings_tabs_array' keeps working.
- Deprecated WC_REST_Subscriptions_Settings. It and all Subscriptions settings in the /wc/v3/settings REST API are now registered by the new Settings_Page class.
- In the /wc/v3/settings/subscriptions REST group, woocommerce_subscriptions_max_customer_suspensions is now registered as a 'number' field without an options list, instead of a 'select' field listing 0-12 and 'unlimited'. The values the field reads and accepts are unchanged: a non-negative integer, or 'unlimited'.
- WCS_ATT_Product::get_instance_id() no longer re-runs APFS module initialization or the 'wcsatt_modules' and 'wcsatt_management_modules' filters.
- wcs_can_items_be_removed() now requires the 'edit_shop_subscription_line_items' capability, which only a subscription's owner holds, and returns false when there is no current user. It takes an optional $user_id, defaulting to the current user. The 'wcs_can_items_be_removed' filter still runs, and now receives that user as a third argument, but it is applied before the capability check and so can no longer be used on its own to show the remove item control.
- Line item removal links and resubscribe links now use separate, operation-specific nonce actions instead of both using the subscription ID, so a link issued for one operation no longer satisfies the other. Links generated before this release stop verifying. A resubscribe link can simply be opened again from My Account > Subscriptions, but an "Undo?" link offered after a line item removal cannot be re-issued, so an item removed shortly before updating stays removed unless the store restores it.
- The subscription plans script ('wcsatt-frontend', apfs-frontend.js) is now registered and enqueued in separate steps. Call WCS_ATT_Display::enqueue_frontend_script() to load it on a page.
- Added the 'woocommerce_subscriptions_paypal_standard_expected_payment_amounts' filter, to adjust the amounts a PayPal Standard subscription payment is accepted as being for before it is recorded.
- Added a 9.2.0 upgrade step that creates the woocommerce_subscription_downloads table where it is missing. Stores that updated from a version older than 8.1.0 never got the table, so sharing downloadable files with subscription products silently failed.
- Removed a redundant maybe_unserialize() call from the product CSV export of subscription plan meta. WooCommerce already unserializes the value before the 'woocommerce_product_export_meta_value' filter runs, so the call never had anything to act on.
- The 'woocommerce_subscriptions_switch_is_identical_product' filter receives a seventh argument, whether the switcher found the switch to be to the plan the item is already on. When paying for a pending or failed switch order, that verdict is kept after the filter runs, since nothing is posted on that path for a callback to compare.
- On stores using high-performance order storage, WCS_Orders_Table_Subscription_Data_Store now writes only the subscription properties that changed, or that have no stored value, instead of re-asserting all of them on each save. Saving a subscription no longer writes those back over values changed since the instance was loaded, whether by another instance in the same request or by an earlier one. The store overrides get_props_to_update() to look for stored values in the orders meta table, where subscription properties are kept, rather than in post meta, where they are never found.
Fixed
- A product name containing HTML is now shown as plain text on the Subscriptions by Product report, instead of being rendered into the page.
- A finished Subscriptions health check scan now reports how many subscriptions it went through, matching the subscriptions list, instead of the smaller number of subscriptions the checks shortlisted.
- Visiting a change payment method link without its 'key' query argument no longer emits an "Undefined array key" PHP warning.
- An order-pay URL carrying an empty order key no longer triggers a fatal error when the order it names does not exist.
- On stores that display prices including tax, recurring totals in the block cart and checkout now note the tax included in the total, matching the "Total due today" row.
- The recipient of a gifted subscription is no longer shown the remove item control on My Account > Subscriptions. The control was never usable by them — removing a line item has always required the subscription's owner.
- A single product that fails to migrate no longer stops the All Products for Subscriptions product data migration for the whole catalog. Products it cannot migrate are logged and may be left at the default "Sell one-time only" mode; the completion notice reports how many failed with a link to the log so they can be checked and set up by hand.
- On stores using high-performance order storage, the Orders screen now warns before trashing a parent order that will also trash its linked subscriptions.
+15 more
- Restored automatic completion of zero-total subscription switch orders placed through the block checkout on WooCommerce 10.9 and newer.
- Scheduled downloadable products linked to a subscription product now grant download permissions to existing subscribers when published at their scheduled time, instead of only when published manually from the admin.
- Saving a subscription product with no linked downloadable products no longer logs a PHP warning.
- Scheduled renewal payments no longer fail with a fatal error when another plugin checks an order's status while the renewal order is created in the background, which left subscriptions on hold and customers uncharged.
- The subscription plans script now loads only on pages that can show subscription options, instead of on every page of the store.
- Selecting a subscription plan inside a theme's quick view modal updates the price and the add-to-cart button again, as it did before 9.0.0.
- Paying for a pending or failed switch order from My Account or an emailed invoice link now completes the switch, instead of creating a second subscription alongside the one being switched.
- On stores with prices entered inclusive of tax, paying for a renewal through checkout now charges the correct total for subscriptions with a manual discount, instead of applying the discount inflated by the tax rate and under-charging the renewal.
- Subscriptions created from the admin screen now record whether the store enters prices inclusive of tax, so their orders are charged and discounted at the right total instead of treating tax-inclusive prices as tax-exclusive.
- Line items bought under a plan set to "Do not stop until cancelled" before All Products for Subscriptions was merged into Subscriptions in 9.0.0 are matched to that plan again. They had stopped being recognized as subscriptions, so recurring and sign-up fee coupons were rejected as not applicable to the product, plan pricing was not applied, and a customer could switch to the plan they were already on instead of being told they cannot switch to the same subscription. On affected stores, switch quotes for these subscriptions now use the purchased plan's billing schedule and free trial. A…
- PayPal payment notifications and API payloads are now reduced to the fields needed to diagnose a payment before being written to the diagnostic logs, so those entries no longer record the keys that authorize changing a subscription's payment method. The store's PayPal debug setting is also no longer overridden for ordinary orders.
- PayPal Standard subscription sign ups and payments are now checked as having been made to the store's PayPal account and in the subscription's currency, and payments also for the amount PayPal was asked to bill. A payment that does not match is not recorded and the reason is noted on the subscription. An active subscription is put on hold, its PayPal profile is suspended, and the customer is sent a renewal invoice whose payment moves the subscription to a new PayPal profile for the right amount.
- On stores that leave the optional PayPal "Receiver email" setting blank, a PayPal Reference Transactions payment notification for an order not yet marked paid is no longer put on hold as coming from a different email address.
- On stores using high-performance order storage, resubscribe orders no longer retain the PayPal payment details (payer name and address, subscriber and transaction IDs) recorded on the original subscription by older versions of the plugin.
- On stores using high-performance order storage without compatibility mode, a PayPal Standard payment notification resent by PayPal is again recognized as already processed. Re-processing a resend could leave a just-renewed subscription on hold with its next payment date in the past. The same fix restores cancelling the previous PayPal profile after a payment method change, and recording renewal payments on stores with a PayPal identity token set.
Version 9.1.05 improved18 fixed
Improved
- Checkout no longer saves the order an extra time when the cart contains no subscription switch — previously a redundant database write on every checkout.
- Improved the dedicated Action Scheduler queue debug log so routine skipped runs no longer read as failures.
- Clearer error message on the Subscriptions settings page when "Prorate until the next billing date" is saved without choosing a product type to prorate.
- Hardened permission and ownership checks across subscription bulk actions, the REST API, and several AJAX and My Account request handlers.
- Deprecated WC_Subscriptions_Cart::get_formatted_product_subtotal() and get_due_today_subtotal() – the "due today" item subtotal now renders on the 'woocommerce_cart_item_subtotal' filter, and Subscriptions no longer filters 'woocommerce_cart_product_subtotal', so code calling WC()->cart->get_product_subtotal() directly gets standard WooCommerce output.
Fixed
- Removed the onboarding notice and walkthrough shown after activating Subscriptions, which pointed merchants at the "Simple subscription" and "Variable subscription" product types — both off by default since 9.0.0.
- Invalid subscription switch payment links no longer attach an unrelated order to checkout.
- Order fields containing serialized text now retain their original value when copied to subscriptions on HPOS stores.
- On stores using legacy (posts) order storage, restoring a subscription's parent order from the trash now makes the subscription reappear on the customer's My Account > Subscriptions page.
- A subscription plan's sign-up fee shown on the product page (the "Sign-up fee:" line, plan option rows and pre-selected plan details) now passes through the 'woocommerce_subscriptions_product_sign_up_fee' filter, so currency and multi-currency plugins can convert it to match the cart, checkout and charged amount.
- Deactivating or updating WooCommerce no longer triggers a site-wide fatal error for up to an hour while Subscriptions' cached WooCommerce version check is still fresh.
- Coupons are now correctly applied when paying for a renewal via the Checkout block (previously the discount showed in the total, but was not deducted from the amount charged).
- Renewal carts now calculate the correct total when the subscription used a recurring percentage coupon. On tax-inclusive stores, sub-cent rounding could make the coupon's discount look manually applied and produce a wrong total.
+10 more
- Setting a yearly "Align Renewal" date on a subscription plan no longer silently discards the alignment when only a month is chosen, or fails with an invalid-date error after the month is switched to one with fewer days.
- On stores using legacy (posts) order storage, restoring a trashed subscription now returns it to its recorded status (e.g. cancelled) instead of pending, matching the behavior on High-Performance Order Storage.
- Enabling web cron support for the first time now generates the web cron URL on the first save, instead of repeatedly asking to save changes without ever producing the URL.
- The "New web cron URL generated" confirmation after generating a web cron URL now shows only once, instead of re-appearing on every subsequent save of the Subscriptions settings screen.
- Storewide subscription plans now appear on the WooCommerce > Settings > Subscriptions screen when the admin language translates "WooCommerce" into non-Latin characters (e.g. Hebrew) — the screen previously showed an empty, unstyled table even though the plans were still saved.
- Upgrading a subscription that was purchased through a resubscribe now credits the amount already paid for the current period, instead of quoting the full prorated price of the new plan.
- On stores that prorate sign-up fees, switching a subscription purchased through a resubscribe now charges the new plan's sign-up fee in full, instead of wiping it with a credit for a sign-up fee that was never paid.
- A stale edit page no longer overwrites the billing schedule after a subscription changes status. Saving an affected Active subscription now clears its stale cancelled date, allowing the remaining schedule to be repaired from the edit screen.
- The My Account > View Subscription page no longer triggers a PHP deprecation notice for subscriptions purchased with PayPal Standard.
- Classic cart and checkout no longer overstate the "due today" item subtotal for a prorated subscription switch or a synced product billed on a later date.
Version 9.0.11 new4 improved4 fixed
New
- A progress notice now appears while your existing All Products for Subscriptions product data migrates in the background, and a completion notice once it finishes.
Improved
- In the Cart block, a subscription item's upfront charge now reads "$10.00 due today" instead of "Due today $10.00", matching the Checkout block.
- The classic shortcode cart and checkout now match the block presentation — the free trial and sign-up fee show on their own labeled lines instead of appended to the price, items with a sign-up fee show the amount due today in the subtotal, and the in-cart subscription plan selector has been removed.
- Subscription product creation settings description.
- New
woocommerce_subscriptions_pre_product_subscription_scheme_modefilter to short-circuit a product's resolved subscription scheme mode before it's read from meta.
Fixed
- While the migration runs, products maintain their subscription plans, instead of temporarily showing as one-time only until their batch completes.
- WooCommerce no longer logs repeated "Invalid plugin file" errors on every admin page load after All Products for Subscriptions was built into Subscriptions.
- The product page's sign-up fee now carries the store's price display suffix (e.g. "incl. VAT") like the subscription price does, so a taxable sign-up fee no longer looks tax-free.
- Adding a product to the cart no longer causes a fatal error under PHP 8 when another plugin's 'woocommerce_add_cart_item_data' filter callback returns a non-array value.
Version 9.0.01 new2 improved14 fixed
New
- All Products for Subscriptions is now built into WooCommerce Subscriptions — sell any product as a one-time purchase, a subscription, or both, with no separate plugin needed. Existing installations migrate automatically, so you can deactivate the standalone plugin. We've also enhanced it along the way:
- Subscription plans now support free trials, sign-up fees, and fixed-amount discounts.
- Choose which storewide subscription plans are assigned to a product.
- Disable one-time purchases on products that use storewide subscription plans.
- Subscription gifting now works with products sold via subscription plans.
- Bulk edit now supports updating purchase options, so you can apply storewide plans to specific products in bulk — replacing the deprecated "Limit to categories" option.
- Improved billing-date-alignment settings (formerly Synchronization), with clearer first-billing options.
- Subscription frequency and expiration are clearer — expiration is now set as a number of payments ("Total payments") rather than a length of time.
- The Subscriptions by Product report now includes products sold via subscription plans.
Improved
- Subscription products now show the free trial and sign-up fee on their own lines below the price, instead of appended to the price text.
- The
subscription_renewal,subscription_switchandsubscription_resubscribequery args are now supported when HPOS is enabled.
Fixed
- Schedule dates set to the same minute (e.g. trial end and next payment) are now treated as equal, instead of differing by a few seconds and silently reverting the save.
- The schedule editor's warning for a next-payment date set before the trial end now reads "Please enter a date after the trial end" instead of incorrectly referring to the start date.
- The My Account > Subscriptions page no longer intermittently 404s right after the plugin is activated.
- $0 subscription switches made within the renewal-sync grace period are now auto-completed instead of left pending.
- Related orders for active subscriptions are no longer swept by the privacy eraser when HPOS is enabled.
- When a customer's subscription becomes active or inactive, their user role now switches cleanly per your settings instead of leaving the old role in place.
- Paying for the renewal of a gifted subscription with multiple items no longer drops all but the first item.
- Guarded
wcs_get_subscription_period_strings()andwcs_get_subscription_trial_period_strings()against PHP 8.1+ "Undefined array key" warnings when an integration uses thewoocommerce_subscription_periods/woocommerce_subscription_trial_periodsfilter t
