=== ArraySubs - Effortless Memberships, Subscriptions, Content Restriction & Recurring Payments for WooCommerce ===
Contributors: emranio
Tags: woocommerce subscriptions, subscription, recurring billing, subscription management, membership
Requires at least: 6.0
Tested up to: 7.0
Stable tag: 1.8.8
Requires PHP: 8.1
License: GPLv3 or later
License URI: https://www.gnu.org/licenses/gpl-3.0.html

Free WooCommerce subscription plugin with recurring billing, membership access, customer portal, retention flows, audits & advanced analytics.

== Description ==

ArraySubs is a free WooCommerce subscription manager and membership plugin that gives you everything you need to sell subscriptions, manage recurring billing, restrict member-only content, and reduce churn — without paying for multiple plugins or stitching together separate tools.

Whether you run a SaaS business, membership site, subscription box, content platform, online course, digital download store, or recurring service — ArraySubs replaces your entire WooCommerce subscription stack with one plugin.

🔗 [Visit ArraySubs](https://arrayhash.com/deals/arraysubs) | 📖 [User Guides & Documentation](https://support.arrayhash.com/arraysubs/)

**What makes ArraySubs different?**

Most WooCommerce subscription plugins lock essential features like membership access control, retention flows, member discounts, and customer self-service behind expensive paywalls. ArraySubs includes all of these in the free version. You get a complete subscription management system — not a crippled demo that forces an upgrade before you can actually run your business.

= All Free Features at a Glance =

* **Subscription products** — simple and variable with per-variation billing configuration
* **Flexible billing** — daily, weekly, monthly, yearly, custom days, or lifetime subscriptions
* **Free trials** — configurable trial days with one-trial-per-customer enforcement
* **Signup fees** — one-time charges at checkout alongside any billing cycle
* **Different renewal pricing** — change the recurring amount after a set number of cycles
* **Renewal sync** — align all renewals to a shared calendar date (monthly, weekly, or yearly)
* **Automated recurring billing** — renewal invoices, trial conversion, and grace period enforcement
* **Two-phase grace periods** — configurable active grace and on-hold grace before cancellation
* **Skip next renewal** — let customers skip upcoming cycles with max skip and cutoff rules
* **Pause / vacation mode** — temporary subscription freeze with auto-resume and cooldown
* **Plan switching** — upgrades, downgrades, and crossgrades with 3 proration methods
* **Retention flow builder** — cancellation reasons, 4 retention offer types, and save-rate analytics
* **Customer subscription portal** — full self-service inside WooCommerce My Account
* **Member access control** — 6 rule types, 9 condition types, 12 operators, nested AND/OR logic
* **Role mapping** — assign WordPress roles based on subscription status
* **Member-only discounts** — percentage or fixed discounts by product, category, or cart
* **Members-only commerce** — hide products, block purchases, or restrict visibility for non-members
* **Content restriction** — restrict posts, pages, custom post types with content dripping
* **URL restriction** — block URLs by exact match, prefix, contains, or regex pattern
* **Download restriction** — secure downloadable files with signed URLs and access tracking
* **16 email notifications** — 13 customer + 3 admin emails with 50+ placeholders
* **Refund management** — prorated refunds, full refunds, and configurable cancellation refund policy
* **Subscription management admin** — list, search, create, edit, filter, and export subscriptions
* **Subscription notes** — 4 author types and 21 automated note events
* **Retention analytics** — 8 KPI cards, churn reasons chart, save rate tracking
* **Reports hub** — central dashboard with 40+ report links across 12 categories
* **Easy setup wizard** — 9-step guided configuration with 7 business type profiles
* **Settings export and import** — JSON backup with section-level import control
* **Custom profile fields** — 6 field types on My Account and admin user profiles
* **Avatar upload** — custom profile photo that replaces Gravatar site-wide
* **My Account editor** — reorder, rename, hide menu items, add custom endpoint pages
* **Content restriction shortcodes** — `[arraysubs_restrict]` with 15 attributes for content gating
* **Visibility shortcodes** — `[arraysubs_visibility]` for login-state-based content control
* **Account shortcodes** — `[arraysubs_login]`, `[arraysubs_logout]`, `[arraysubs_user]`
* **Hide admin bar** — clean frontend for non-admin users
* **Restrict wp-admin access** — block customer roles from the WordPress dashboard
* **Login page redirect** — redirect `/wp-login.php` to WooCommerce My Account
* **Login as User** — admin impersonation from 6 locations with nested session support
* **One-click checkout** — skip the cart and send customers straight to checkout
* **Block checkout and classic checkout** — full support for both WooCommerce checkout types
* **CSV and JSON export** — export subscription data with 15 fields
* **Price locking** — product price changes never affect existing subscribers
* **WooCommerce HPOS compatible** — works with High-Performance Order Storage

= Subscription Products =

Turn any WooCommerce simple or variable product into a subscription product. Configure billing periods (daily, weekly, monthly, yearly, or custom day intervals), billing intervals from 1 to 12, subscription length for automatic expiration, free trial days, one-time signup fees, and a different renewal price that kicks in after a configurable number of billing cycles. Variable products support independent subscription configuration per variation — create tiered plans like Basic at $9/month and Premium at $29/month with different trial periods, signup fees, and billing schedules.

Subscription pricing is displayed clearly across the product page, cart, mini-cart, checkout, and order confirmation — so customers always understand what they are paying and when.

Product prices are locked at the time of purchase. If you change the price later, existing subscriptions continue at the original price.

= Recurring Billing and Renewal Engine =

ArraySubs automates your entire billing workflow with three background jobs that run continuously:

* **Generate Upcoming Renewals** — creates renewal invoices 6 hours before the due date
* **Check Overdue Renewals** — enforces the two-phase grace period on unpaid invoices
* **Process Trial Conversions** — converts expired trials to active paid subscriptions daily at 2 AM

Renewal invoices are standard WooCommerce orders linked to the subscription. Customers receive an email with a Pay Now link. When they pay, the subscription is automatically extended.

**Renewal sync** aligns all subscription renewals to a shared calendar date — perfect for subscription boxes, weekly delivery programs, cohort-based memberships, and annual billing cycles. Choose monthly (specific day 1-28), weekly (specific day), or yearly (specific day + month) sync with two first-payment options: prorate the first payment or extend the first billing period.

**Different renewal pricing** lets you override the recurring amount after a set number of cycles — ideal for introductory pricing, graduated pricing, or loyalty discounts.

= Two-Phase Grace Period =

When a renewal goes unpaid, ArraySubs does not cancel the subscription immediately. Instead, it moves through a configurable two-phase timeline:

* **Active grace** (default 3 days) — subscription stays fully active, customer retains full access
* **On-hold grace** (default 7 days) — subscription moves to on-hold with restricted access
* **Cancellation** — subscription is cancelled after both grace phases expire

Payment at any point during the grace period — active or on-hold — restores the subscription to active status.

= Skip and Pause =

Give subscribers flexibility without forcing cancellation:

* **Skip next renewal** — customers can skip 1-3 upcoming cycles (configurable), with a cutoff that prevents skipping too close to the renewal date. Customers can undo a skip or change the skip count at any time.
* **Pause / vacation mode** — freeze a subscription for up to 30 days (configurable) with a maximum of 2 pauses per subscription and a 30-day cooldown between pauses. Subscriptions auto-resume after the pause duration.

= Plan Switching =

Let customers upgrade, downgrade, or crossgrade between subscription products without cancelling and resubscribing. Configure upgrade/downgrade/crossgrade targets per product, choose from 3 proration methods (Prorate Immediately, Apply at Renewal, or No Proration), and set optional switch fees per direction.

Plan direction is determined automatically using a normalized daily rate comparison with 5% tolerance. Customers see a proration preview in the portal before confirming.

= Free Trials =

Offer free trial periods per product or per variation. Trials convert to active paid subscriptions automatically via a daily batch job. Add a signup fee during trial to offset risk. Enforce **one trial per customer** to prevent trial abuse. Configure whether a payment method is required for $0 trial orders.

= Retention Flow Builder =

When a customer clicks Cancel, they enter a guided 3-step flow designed to save the subscription:

1. **Select reason** — 7 default reasons (too expensive, not using, found alternative, missing features, technical issues, temporary break, other) plus unlimited custom reasons
2. **Retention offers** — targeted offers matched to the selected reason
3. **Confirm cancellation** — final confirmation if no offer is accepted

**4 retention offer types:**

* **Discount** — percentage off for a configurable number of cycles (one per subscription)
* **Pause** — temporary pause with automatic resume
* **Downgrade** — redirects to the plan switching flow
* **Contact Support** — links to a configurable support page

Each offer can be triggered by specific cancellation reasons, so "Too expensive" shows the discount offer while "Technical issues" shows the contact support offer. Eligibility conditions check subscription value, customer lifetime spend, and remaining days before showing offers.

Supports **end-of-period cancellation** with a "Keep My Subscription" button that lets customers undo a scheduled cancellation.

= Retention Analytics =

Track the effectiveness of your retention flows with a dedicated analytics dashboard:

* **8 KPI cards** — total cancellations, retention offers shown, offers accepted, save rate, discounts given, pauses given, downgrades given, support redirects
* **Churn reasons pie chart** — see why customers cancel
* **Retention offer distribution** — see which offers are most accepted
* **Trend line chart** — cancellations vs saves over time
* **Activity logs** — per-entry details with customer, subscription, reason, offer, and outcome
* **Product filter** — break down retention data by product

= Customer Subscription Portal =

Customers get a full-featured subscription management portal inside WooCommerce My Account:

* **Subscription list** — status badges, product name, recurring amount (with discount/coupon display), next payment date, start date, and View Details button with pagination
* **Subscription detail page** — 9-row overview table with status, product, recurring amount (showing original + discount), billing cycle, start date, end date, next payment date, trial end date, and last updated
* **Related orders** — all linked WooCommerce orders with Pay Now links for pending invoices
* **Refund history** — date and amount for each refund
* **Notes timeline** — chronological subscription events with Customer, Admin, System, and Gateway author badges

= Member Access Control =

A powerful rules engine with 6 rule types, 9 condition types, 12 comparison operators, nested AND/OR condition groups, and scheduled content dripping — all in the free version.

**6 rule types:**

* **Role mapping** — assign or replace WordPress roles based on subscription status (7 status behaviors with Add Role or Replace Role modes)
* **Discount rules** — percentage or fixed discounts, per-item or per-cart, with "best discount wins" logic and product/category targeting
* **Ecommerce restriction** — allow purchasing, block purchasing, hide products, or modify pricing based on membership conditions
* **URL restriction** — restrict any URL using exact match, prefix, contains, or regex patterns with 4 actions (redirect, 404, access denied, login form) and a priority system (1-100)
* **Post type / content restriction** — restrict all posts of a type, specific posts, or taxonomy-based content with 3 archive behaviors (hide, show teaser, show normally), per-post overrides, and content dripping
* **Download restriction** — control access to WooCommerce downloadable files with signed URL delivery and usage tracking

**9 condition types:**

Subscription status, has active subscription, subscription variation, purchased product, purchased variation, purchased from category/taxonomy, lifetime spend, user role, and nested groups for recursive AND/OR logic.

**12 comparison operators:**

Equals, not equals, greater than, greater than or equal, less than, less than or equal, contains, not contains, in, not in, empty, not empty.

= Refund Management =

3 refund-on-cancellation policies: Allow Immediate, Refund at End of Period, or No Automatic. Configure automatic gateway refund, set a minimum refund amount, and offer prorated refunds calculated using a daily rate for the unused billing period with a preview before processing.

Refund history is recorded on the subscription with date, amount, and type for full audit visibility.

= Subscription Checkout =

A 3-phase checkout flow (Cart Validation → Payment Processing → Subscription Creation) with 5 cart validation rules:

* Mixed cart control — allow or disallow mixing subscription and regular products
* One per customer — prevent duplicate subscriptions for the same product
* One per product — limit one subscription per product in the cart
* Billing cycle compatibility — ensure compatible billing cycles in multi-subscription carts
* Gateway capability — verify the payment gateway supports subscriptions

**One-click checkout** with 3 modes (default product only, subscription products only, or all products) plus a Disable Cart Page option. Full support for both WooCommerce classic checkout and block checkout (Store API). Customer accounts are automatically created at checkout for subscription purchases.

= Easy Setup Wizard =

Configure your entire subscription engine in minutes with a 9-step guided wizard. Choose from 7 business type profiles (SaaS, Subscription Box, Membership, Digital Content, Professional Services, Nonprofit, or Custom) and answer questions about billing, checkout, cancellation, access control, emails, and features. Each profile preloads smart defaults that you can customize before applying.

**Settings export** downloads your entire configuration as JSON with automatic stripping of sensitive gateway credentials. **Settings import** lets you upload a JSON file and select exactly which sections to apply — subscription settings, retention flow, My Account layout, member access rules, emails, profile fields, and more.

= Profile Builder =

**Custom profile fields** — 6 field types (Text, Textarea, Select, Date, Checkbox, File Upload) that appear on WooCommerce My Account, WordPress admin user profiles, and the Add New User screen. Drag-and-drop reordering, enable/disable per field, and secure file uploads with configurable type and size limits.

**Avatar upload** — let customers upload a profile photo that replaces their Gravatar site-wide. Instant REST API upload with preview, configurable file size (1-20 MB), and automatic Gravatar fallback.

**My Account editor** — take full control of the WooCommerce My Account navigation. Reorder menu items with drag-and-drop, rename labels, show or hide built-in items, and add custom endpoint pages that link any WordPress page or post inside My Account with clean URLs. Compatible with Gutenberg, Elementor, and Bricks page builders. Optional Prevent Direct Access redirects the original page URL to the My Account endpoint.

= Shortcodes =

A complete shortcode library for content gating and member experiences:

* `[arraysubs_restrict]` — gate content by subscription status, products, variations, purchased products, lifetime spending, roles, and more with 15 attributes and AND/OR condition logic
* `[arraysubs_visibility]` — show or hide content based on login state with fallback content support
* `[arraysubs_login]` , `[arraysubs_logout]`,
* `[arraysubs_user]` — display current user name or profile field with guest fallback

= Toolkit Settings =

* **Hide admin bar** — remove the WordPress admin bar for all non-admin users
* **Restrict wp-admin access** — block non-authorized roles from `/wp-admin` with configurable redirect (My Account or 404) and safety rules for AJAX, REST API, and WP-Cron
* **Login page redirect** — redirect `/wp-login.php` to WooCommerce My Account or 404, while keeping password reset, email verification, and logout flows working
* **Login as User** — one-click admin impersonation accessible from 6 locations (Users list, User profile, WooCommerce order detail, Subscription detail, Member dashboard, and admin screens) with nested impersonation support and a notification bar for returning to the admin session

== Frequently Asked Questions ==

= Is ArraySubs really free? =
Yes. ArraySubs includes subscription products, recurring billing, customer portal, plan switching, retention flow builder, member access control, member discounts, 16 email notifications, refund management, admin tools, profile builder, shortcodes, toolkit settings, and more in the free version. No trial period, no feature limit on number of subscriptions, no surprise paywall.

= How do I create a WooCommerce subscription product? =
Navigate to Products > Add New (or edit an existing product), and enable subscription mode. Configure the billing cycle, amount, free trial, signup fee, and other subscription parameters. ArraySubs supports both simple and variable subscription products with independent per-variation configuration.

= Can I create variable subscription products with different plans? =
Yes. Variable products support per-variation subscription configuration. Each variation gets independent billing period, interval, subscription length, free trial duration, signup fee, different renewal price, and pricing. Create tiered plans like Basic, Standard, and Premium with different pricing and trial periods.

= Does ArraySubs support free trials and signup fees? =
Yes. Configure free trial days per product or per variation. Add a one-time signup fee charged at checkout. Enforce one trial per customer to prevent trial abuse. Trials convert to active subscriptions automatically.

= How does recurring billing work? =
ArraySubs creates renewal invoices 6 hours before the due date via automated background jobs. Customers receive an email with a Pay Now link. When paid, the subscription extends automatically. Unpaid invoices enter a two-phase grace period (Active → On-Hold → Cancelled) with configurable days for each phase.

= Can customers manage their own subscriptions? =
Yes. The built-in customer portal in WooCommerce My Account lets customers view subscriptions, cancel (with retention offers), undo cancellation, switch plans with proration preview, skip renewals, pause subscriptions, reactivate expired subscriptions, and pay pending invoices.

= What is the retention flow builder? =
When a customer tries to cancel, they enter a 3-step flow: select a reason, see targeted retention offers (discount, pause, downgrade, or contact support), and confirm cancellation. Each offer can be matched to specific reasons. The retention analytics dashboard tracks save rate, churn reasons, and offer acceptance.

= Does ArraySubs support plan switching (upgrades and downgrades)? =
Yes. Configure upgrade, downgrade, and crossgrade targets per product. Choose from 3 proration methods: Prorate Immediately, Apply at Renewal, or No Proration. Set optional switch fees per direction. Customers see a proration preview before confirming.

= Can I let customers skip or pause their subscription? =
Yes. Skip next renewal lets customers skip upcoming billing cycles (configurable max skips and cutoff). Pause / vacation mode freezes subscriptions temporarily with auto-resume, max pause duration, max pauses per subscription, and cooldown between pauses.

= How does member access control work? =
ArraySubs includes a powerful rules engine with 6 rule types (role mapping, discounts, ecommerce restriction, URL restriction, content/post type restriction, download restriction), 9 condition types, 12 comparison operators, and nested AND/OR logic. Restrict content, products, URLs, and downloads based on subscription status, product ownership, lifetime spend, roles, and more.

= Can I restrict content to members only? =
Yes. Restrict posts, pages, and custom post types using 3 targeting modes (all of type, specific posts, or taxonomy-based). Choose archive behavior (hide, show teaser, or show normally). Support content dripping with date-based scheduling and per-post overrides.

= Can I create member-only discounts in WooCommerce? =
Yes. Create percentage or fixed discount rules targeted to specific products or categories. Discounts apply per-item or per-cart. When multiple rules match, the best discount wins automatically.

= Can I hide products from non-members? =
Yes. Ecommerce restriction rules let you allow purchasing, block purchasing, hide products, or modify pricing based on membership conditions. Target specific products or entire categories.

= How many email notifications are included? =
16 total — 13 customer emails (new subscription, trial started, trial converted, renewal reminder, renewal invoice, payment successful, payment failed, on-hold, cancelled, expired, reactivated, auto-downgrade, retention discount accepted) and 3 admin emails (new subscription, cancelled, payment failed). All emails support configurable subject, heading, content, and 50+ placeholders.

= Does it work with WooCommerce block checkout? =
Yes. ArraySubs fully supports both classic WooCommerce checkout (shortcode) and block checkout (Store API) for subscription purchases.

= Can I export and import settings? =
Yes. Export your entire configuration as a JSON file and import it on another site with section-level control. Sensitive gateway credentials are automatically stripped from exports.

= Does ArraySubs include an admin subscription management interface? =
Yes. List subscriptions with 7 status tabs, search by ID/customer/product, create and edit subscriptions manually, view detailed subscription screens with 17 information cards, review 21 automated note events, and export to CSV or JSON.

= Can I customize the WooCommerce My Account page? =
Yes. The My Account Editor lets you reorder menu items with drag-and-drop, rename labels, hide items, and add custom endpoint pages that link any WordPress page inside My Account. Compatible with Gutenberg, Elementor, and Bricks.

= Does ArraySubs have shortcodes for content restriction? =
Yes. Use `[arraysubs_restrict]` with 15 attributes for content gating by subscription status, products, roles, and more. Use `[arraysubs_visibility]` for login-based content control. Plus `[arraysubs_login]`, `[arraysubs_logout]`, and `[arraysubs_user]` shortcodes.

= Can I sync all subscription renewals to the same date? =
Yes. Renewal sync aligns all renewals to a shared calendar date — monthly (specific day), weekly (specific day), or yearly (specific day + month). Choose to prorate the first payment or extend the first billing period.

= Can I impersonate a customer as an admin? =
Yes. The Login as User feature lets admins impersonate any customer from 6 locations across the admin. Nested impersonation is supported, and a notification bar ensures you can return to your admin session.

= Is it compatible with WooCommerce HPOS? =
Yes. ArraySubs is fully compatible with WooCommerce High-Performance Order Storage.

= Who is ArraySubs best for? =
ArraySubs is built for WooCommerce store owners who sell SaaS, memberships, subscription boxes, online courses, digital downloads, premium content, service retainers, or any recurring product. It is a strong WooCommerce subscriptions free alternative for stores that need subscriptions, memberships, and access control without paying for multiple expensive plugins.

== Screenshots ==

1. Admin Dashboard view
2. Subscription List overview
3. Subscription Details page
4. Settings configuration

== Changelog ==

= v1.8.8 - 30 june, 2026 =
* Improved: UI in classic checkout.
* Fixed: Double checkout button in cart page.

= v1.8.7 - 29 june, 2026 =
* Fixed: Fatal error when a third-party plugin changed the global `$product` value to a string and ArraySubs later called `is_type()` on it.

= v1.8.6 - 27 june, 2026 =
* Added: Gutenberg block UX improvement.

= v1.8.5 - 27 june, 2026 =
* Added: Gutenberg block support for content restriction and member access.
* Added: UX improvement.

= v1.8.4 - 25 june, 2026 =
* Added: Elementor widget controls for content restriction and member access.

= v1.8.3 - 20 june, 2026 =
* Fixed: CustomEndpoints status-counts and select-options REST routes now require `manage_woocommerce` or `manage_options`, preventing lower-privileged users from enumerating private admin data such as subscription counts, titles, and terms.
* Fixed: Admin input, select, and button heights now stay aligned under WordPress 7.0 across subscription lists, Activity Audits, Gateway Logs, Role Mapping, Grace Period, and related admin screens.
* Improved: Activity Audits table readability by allowing audit and renewal-failure columns to size to their content, replacing separate Author / Type / Visibility columns with a stacked Meta column, and restoring centered icon-and-label filter buttons.
* Improved: Restriction Rule Builder condition separators now align more cleanly with nested condition rows.
* Improved: Admin UI primary colors now follow the active WordPress admin color scheme through `--wp-admin-theme-color`, including DataList, FormBuilder, admin pages, shared components, and customer portal styles.
* Improved: FormBuilder and DataList theme variables now use WordPress admin color variables with safe fallback values for older WordPress and frontend contexts.
* Improved: Async CSS chunks now include a content hash in their filenames so rebuilt chunk styles invalidate browser caches correctly.

= v1.8.2 - 7 june, 2026 =
* Added: Renewal Sync settings in General Settings so new non-trial subscriptions can renew on the next billing-cycle boundary (next day, next store week, first day of next month, or January 1 for yearly plans).
* Added: Renewal Sync first-charge options for either a prorated signup charge until the synced renewal date or a full recurring charge at signup.
* Added: Easy Setup wizard questions for enabling Renewal Sync and choosing the first-charge behavior during initial store configuration.
* Improved: Checkout, cart, and subscription summaries now show synced first-charge wording, the first full renewal date, and the correct next charge amount/date when Renewal Sync is active.
* Improved: Renewal Sync now applies prorated signup pricing in cart and checkout, stores renewal-sync metadata on created subscriptions, and keeps future renewal dates anchored to the expected billing-cycle boundary.
* Improved: Renewal Sync checkout support is now limited to manual/offline gateways and Stripe, with unsupported automatic gateways hidden or blocked when a synced subscription is in the cart.
* Improved: Skip Renewal now accepts, stores, and returns a skip reason through the REST API and skip history metadata.
* Improved: General Settings save actions now show a spinner/loading state while settings are being saved.
* Improved: Updated readme product links from `arrayhash.com/arraysubs` to `arrayhash.com/deals/arraysubs`.

= v1.8.1 - 1 june, 2026 =
* Added: Add New Subscription now prefills customer information when an admin selects a user, including invoice email, billing email, billing phone, billing address, primary shipping address, shipping phone, and saved additional shipping addresses.
* Added: Manual subscription billing data now includes a dedicated Billing Email field, and shipping data now includes a Phone field.
* Added: Saved Shipping Address selector on the Add New Subscription form, allowing admins to switch between the customer's primary and additional shipping addresses before saving.
* Added: Manage Members profile editing UI for account details, billing address, primary shipping address, and multiple additional shipping addresses, with a shared SpinnerButton loading state during save.
* Improved: Manage Members displays additional shipping addresses in the Addresses panel.
* Improved: Core/pro customer profile data now stays aligned so member information edited in Manage Members can be reused by the manual subscription form.
* Improved: Stripe automatic payment sync support in the pro companion now creates and repairs the ArraySubs Stripe webhook connection through the official WooCommerce Stripe API, syncs test/live webhook secrets, and keeps Gateway Health aligned with the connected webhook.
* Fixed: Feature Manager invalid-row cancel leaves blank feature.
* Fixed: Pro Plan fixture price mismatches QA plan.
* Fixed: Feature Manager settings controls do not toggle from browser clicks.
* Fixed: Subscription detail missing Feature Log entry point.
* Fixed: Store Credit settings toggles do not persist from browser clicks.
* Fixed: Store Credit settings missing required guidance text.
* Fixed: Store Credit master switch does not hide module/product type.
* Fixed: Store Credit customer search shows no dropdown result.
* Fixed: Store Credit History REST route fails in browser.
* Fixed: Credit adjustment REST allows over-deduct.
* Fixed: Store Credit product edit reloads as Simple product.
* Fixed: Store Credit storefront purchase controls broken.
* Fixed: Store credit not shown/applied in cart totals.
* Fixed: Cart page lacks Proceed to Checkout button.
* Fixed: Checkout credit not applied to subscription order.
* Fixed: Checkout credit negative check blocked by plan switching.
* Fixed: Store-credit-zeroed renewal remains pending.
* Fixed: Renewal auto-apply ignores minimum credit threshold.
* Fixed: Refund-as-credit uses native dialogs.
* Fixed: Renewal reminder lacks trial/end-specific wording.
* Fixed: Admin emails ignore ArraySubs admin email override.
* Fixed: Store credit money placeholders render HTML in subject.
* Fixed: SCA renewal email lacks payment amount.
* Fixed: Subscriptions list columns differ from QA contract.
* Fixed: Subscription search by email returns no results.
* Fixed: Subscription filters and pagination do not update URL state.
* Fixed: Add subscription form layout and address controls differ from QA plan.
* Fixed: Add subscription product selector navigates away from form.
* Fixed: Subscription note composer lacks rich text bold control.
* Fixed: Subscription note author/type output does not match plan.
* Fixed: Woo order subscription link points to inaccessible legacy admin route.
* Fixed: Export REST payload shape differs from CSV/JSON contract.
* Fixed: Active-tab CSV export ignores status filter.
* Fixed: Documented pretty REST export URL returns site HTML.
* Fixed: Cancelled subscription keeps future renewal reminder action.
* Fixed: Status dropdown On Hold does not record on-hold date meta.
* Fixed: Cancelled subscription detail shows vacation mode as active.
* Fixed: Cancel Subscription modal cannot capture reason and details separately.
* Fixed: Manage Members search builds malformed REST URL.
* Fixed: Manage Members profile email is not a mailto link.
* Fixed: Impersonation banner missing on homepage after login-as-customer.
* Fixed: Pretty My Account subscriptions URL renders blog page.
* Fixed: Manage Members hash route change can show stale profile.
* Fixed: Manage Members Store Credit quick link is not scoped.
* Fixed: Reports Hub quick-nav does not update URL hash.
* Fixed: Reports Hub internal ArraySubs cards use inaccessible page slug.
* Fixed: Revenue at Risk KPI shows period delta.
* Fixed: Dashboard MRR uses 4.35 weekly multiplier instead of manual 4.333.
* Fixed: Dashboard cards with order filters navigate to access denied.
* Fixed: Subscription charts have no manual interval selector.
* Fixed: Credit Purchase order type label is lowercase.
* Fixed: Revenue analytics subscription amount cards are missing.
* Fixed: Orders list missing coupon/subscription filters and summary panel.
* Fixed: Activity Audits entity filter returns wrong Type badges.
* Fixed: Settings audit change details missing after settings save.
* Fixed: Customer cancellation modal fails for non-admin customer subscriptions.
* Fixed: Activity Audits filters hide shop-manager product update.
* Fixed: Logging Settings popover missing always-on entity note.
* Fixed: Email reactivation logs duplicate audit rows.
* Fixed: Failed process-renewal job is logged as Success.
* Fixed: Failed renewal creates orphan zero-value order.
* Fixed: Stripe card missing capability tags.
* Fixed: Webhook Event Log missing event-type filters.
* Fixed: Stripe test webhook not recorded in Gateway Logs.
* Fixed: Subscriptions list lacks gateway filter.
* Fixed: Renewal Failures troubleshooting screen missing.
* Fixed: Portal Action Failures screen missing.
* Fixed: Access-Rule Conflicts UI missing.
* Fixed: Documented renewal test users are not seeded.
* Fixed: Cancelling pending renewal order moves subscription on-hold.
* Fixed: Mail catcher or email content log unavailable.
* Fixed: Renewal order creation writes internal _payment_tokens meta.
* Fixed: Failed Stripe renewal bypasses active grace.
* Fixed: Renewal recovery leaves failure meta uncleared.
* Fixed: Failed renewal action is logged as success.
* Fixed: Overdue on-hold state lacks on_hold_date.
* Fixed: On-hold access check lacks Standard Weekly rule.
* Fixed: Overdue cancellation leaves failed renewal linked.
* Fixed: Trial conversion does not queue renewal reminder.
* Fixed: Auto-downgrade audit lacks structured change diff.
* Fixed: Customer portal skip and pause actions fail.
* Fixed: Skipped renewal requires extra generate at shifted date.
* Fixed: Renewal reminder hook sends duplicate emails.
* Fixed: Subscription expiring soon hook does not send email.
* Fixed: Fixed-period expiration overwrites configured end date.
* Fixed: Expired subscription keeps renewal reminder action.
* Fixed: Fixed-period access check lacks protected-content rule.
* Fixed: Refund behavior control is not accessible as radio/select.
* Fixed: Refund settings toggles do not change from browser clicks.
* Fixed: Prorated refund floors half-day usage.
* Fixed: Prorated refund action missing from subscription detail.
* Fixed: Stripe refund webhook audit records zero amount.
* Fixed: EOP cancellation has no refund handling or no-refund note.
* Fixed: Credit refund missing on customer order detail.
* Fixed: Credit-refunded order still allows gateway refund.
* Fixed: Cancelled subscription still exposes Update payment method.
* Fixed: Full refund must sync order and subscription status.
* Fixed: Pro-off scheduled gateway cleanup fails with no callback.
* Fixed: Scheduled actions run during cron stoppage.
* Fixed: Cancel and plan switch race both succeed.
* Fixed: Concurrent admin edit notes lose actor and first write.
* Fixed: Renewal order Stripe refund fails when transaction ID is PaymentIntent.
* Fixed: Auto-fill customer info on Add New Subscription form.

= v1.8.0 - 23 may, 2026 =
* Fixed: Shop Manager role can now access the ArraySubs admin menu and settings pages (required capability changed to manage_woocommerce).
* Fixed: Admin top-level menu now labeled "ArraySubs" instead of "Subscription".
* Fixed: Automatic Payments settings section is now hidden when ArraySubsPro is inactive.
* Added: General Settings now includes Customer Action controls (Allow Cancellation, Allow Pause/Suspension, Allow Reactivation) with a related info box.
* Fixed: Gateway Health dashboard webhook last-seen timestamp is now read from the correct event log, eliminating the "Never" display discrepancy.
* Fixed: Wizard profile switch from the Review screen now replaces prior profile defaults with the newly selected business-type defaults.
* Fixed: Wizard conditional fields for trial options and custom billing cycle are now shown/hidden correctly when the relevant toggles are activated.
* Fixed: Setup export now always includes all expected config groups even when some are absent or empty.
* Fixed: Setup import Subscription section now applies email and toolkit values instead of silently skipping them.
* Fixed: Recurring price format on product pages and catalog now renders as "9.99 / month" instead of "9.99 Every month".
* Fixed: Variable subscription variation price display no longer shows stale or incorrect billing schedule on initial load and after option changes.
* Fixed: Subscription product admin save is now blocked and a validation error is shown for invalid price, billing interval out of range, or missing renewal price.
* Fixed: Lifetime Deal product type no longer displays renewal schedule or billing cycle duration on the storefront or in cart/checkout.
* Fixed: Cart now renders the "Proceed to Checkout" button for trial product items.
* Fixed: Checkout subscription summary now shows the next charge date and authorization copy for trial, signup-fee, stepped-renewal, and fixed-length products.
* Fixed: Signup fee line in checkout summary now uses the label "Subscription Signup Fee" consistently.
* Fixed: Stepped renewal checkout summary wording now reads "X every Y for the first N payments, then X every Y" to match the user manual contract.
* Fixed: Mixed-cart, multiple-subscriptions-in-cart, one-per-product quantity, and different-billing-cycle cart error messages now match the documented exact copy.
* Fixed: Subscription guest checkout now forces the WooCommerce account-creation form when auto_create_account is enabled.
* Fixed: One-click all-items checkout mode now fully clears same-product quantities before adding the clicked item.
* Fixed: Non-subscription coupons are now rejected when applied to a subscription-only cart.
* Fixed: Plan-switch checkout wording now reads "Replaces your current [Plan Name] subscription" to match the user manual.
* Fixed: Active and Trial subscription rows in the admin list no longer show the Delete row action.
* Fixed: Subscription detail activity timeline no longer creates duplicate "Payment Received" entries for the same order/event (idempotency guard added).
* Fixed: Trial subscription rows in the My Subscriptions list now display the trial-end / next-payment date.
* Fixed: Account navigation "Subscriptions" count now matches the actual subscription count visible in the list.
* Fixed: Subscriptions pagination now loads the correct rows for page 2+ instead of repeating page 1.
* Fixed: Cancelled subscription detail page no longer renders the Subscription Actions section or any action buttons.
* Fixed: Skip Next Renewal and Pause Subscription controls now appear on the active subscription detail page when the respective settings are enabled.
* Fixed: Immediate cancellation now completes successfully after a reason is selected; end-date is written at cancellation time.
* Fixed: End-of-period (scheduled) cancellation now completes successfully after a reason is selected.
* Fixed: Undo Scheduled Cancellation now fully clears the pending-cancellation state (banner, status pill, and button) after the modal confirms.
* Fixed: Skip renewal confirmation now submits successfully and writes skip metadata to the subscription.
* Fixed: Pause subscription confirmation now submits successfully and writes pause metadata to the subscription.
* Fixed: Change Plan modal now loads Upgrade/Downgrade/Others plan options without a "Failed to load plan options" error.
* Fixed: Shipping address update from the customer portal now persists the new address successfully.
* Fixed: On-Hold subscription detail no longer exposes a Cancel Subscription action (only Resume is shown).
* Fixed: Expired subscription detail no longer exposes a Reactivate action; Subscription Actions section is hidden for terminal statuses (Expired, Cancelled).
* Fixed: Email previews in WooCommerce > Emails now populate with real sample data instead of blank/zero values.
* Fixed: Email template footer no longer displays literal placeholder tokens in previews.
* Fixed: Default cancellation reason list now includes "temporary_pause" / "Just need a temporary break" as the seventh default reason.
* Fixed: Customer cancel modal now fetches the current reason list from the server instead of using a stale JS-bundled copy.
* Fixed: Retention offer modal no longer gets stuck on "Loading..." when a retention offer is configured; discount card renders and is interactive.
* Fixed: Retention analytics Cancellation Reasons chart now segments by actual logged reasons instead of always showing "not_provided".
* Fixed: Role mapping now removes the assigned role when a subscription is cancelled, with a fallback to subscriber if no other roles remain.
* Fixed: URL restrict rules with require_login=true now redirect unauthenticated visitors to the login page instead of sending them directly to the configured redirect target.
* Added: All action buttons in the admin panel and My Account customer portal now show a loading spinner and disabled state while an AJAX/REST request is in flight.
* Fixed: Native window.confirm() dialogs replaced with the shared useConfirm() modal across all remaining admin React components.
* Fixed: include error for order-subscriptions.php template file resolved.

= v1.7.10 - 8 may, 2026 =
* Added: Loading state added to all action buttons on admin panel and My Account.
* Fixed: include error - order-subscriptions.php

= v1.7.9 - 2 may, 2026 =
* Added: Enhanced subscription action button styling and improved the customer portal layout.
* Added: Enhanced subscription status handling and payment processing logic.
* Added: Improved guest-customer subscription handling and status management.
* Added: Enhanced retention and skip management logic with improved order handling and validation.

= v1.7.8 - 29 april, 2026 =
* Added: Enhanced subscription cancellation logic and loading styles in activity audits.
* Added: Custom WooCommerce query vars for subscription endpoints and loading styles.

= v1.7.7 - 29 april, 2026 =
* Added: Payment retry controls with pre-retry charge verification, gateway-specific retry settings, manual retry actions, and gateway sync endpoints.
* Added: Pending cancellation workflow with customer portal indicators, undo support, and customer/admin email notifications.
* Added: Customer-facing subscription reactivation with a dedicated REST endpoint, portal button, and success/error handling.
* Added: Enhanced plan switching with server-side proration enforcement and explicit switch fee handling.
* Added: Pending switch details and cancellation controls in the subscription admin and customer portal.
* Improved: Plan switching now resolves product prices through the centralized proration calculator and handles quantities consistently.
* Improved: Renewal orders, notes, and timeline events now use structured event types for clearer tracking and display.
* Improved: Customer portal API calls now use REST URL building helpers for better permalink compatibility.
* Improved: Cancellation handling now consolidates subscription ID resolution and removes redundant meta updates.
* Improved: Renewal order creation now handles shipping context dynamically.
* Fixed: Scheduled cancellation checks now skip subscriptions that are already cancelled or expired.
* Removed: Legacy sync-renewal settings, helper functions, UI cards, and unused styles.
* Removed: Legacy portal action and suspension toggles from settings payloads and Easy Setup.

= v1.7.6 - 15 april, 2026 =
* Fixed: Suppression of add-to-cart success notice for one-click checkout.
* Fixed: One subscription per customer validation in cart and checkout processes.
* Fixed: Filter to hide cash on delivery for subscription checkout products.
* Fixed: Trial quantity validation for subscription products in cart.
* Fixed: Subscription gateway validation on reactivation to ensure proper billing setup.
* Fixed: Next payment date is now calculated automatically from the billing schedule; manual editing, related hooks, and admin UI were removed.
* Fixed: REST methods now use POST for retention offers and undo skip actions.
* Fixed: Cancellation reasons handling now uses a single source-of-truth function for consistency.
* Fixed: Customer portal settings no longer include menu title and position options.
* Fixed: Renewal sync alert in General Settings now displays conditionally based on sync_enabled status.
* ImpFixedroved: Localization for date and duration strings in formatting functions.
* Removed: arraysubs_next_payment_date_changed hook and its AutoNotes handler.

= v1.7.5 - 12 april, 2026 =
* Improved: All action buttons are now position-fixed at the bottom for better UX.
* Improved: Setup wizard next/prev navigation now auto-scrolls to the top.
* Fixed: Free trial subscription checkout now handles payment skipping or enforcement per setting, with trial-only cart and signup fee detection, $0 trial pricing during order processing, preserved $0 prices during checkout migration, and trial-started hook firing at the correct time.
* Fixed: Free trial label no longer shown with an incorrect 'every' prefix.

= v1.7.4 - 10 april, 2026 =
* Fixed: Header was sent before session start due to an unwanted newline.

= v1.7.3 - 5 april, 2026 =
* Improved: Added the user documentation URL.
* Fixed: Minor bug fix.

= v1.7.2 - 5 april, 2026 =
* Fixed: Minor bug fix.

= v1.7.1 - 28 march, 2026 =
* Improved: CSS improvements.
* Fixed: Minor bug fix.

= v1.7.0 - 24 march, 2026 =
* Added: [hot] [new] Automatic downgrade targets that can move a subscription to another plan when it expires or is cancelled.
* Added: [hot] Multiple-subscription cart controls with new mixed-cart and billing-cycle settings, classic cart and Store API validation, and General Settings UI toggles.
* Added: [new] A retention analytics page with overview and detailed logs.
* Added: Checkout-time subscription migration flow with an auto-migrate-on-checkout setting, cart and order migration handling, and migration processing safeguards.
* Improved: Settings sanitization and REST settings output for renewal sync, proration, automatic payments, feature manager options, and new multiple-subscription controls.
* Improved: Cart validation and checkout messaging for mixed carts, multiple subscriptions, differing billing cycles, distinct subscription products, and one-per-product quantity rules.
* Fix: A styled Help page with the correct help email address.
* Fix: Renewal payment failure hooks and gateway failure handling for emails, notes, and renewal processing.

= v1.6.0 - 20 march, 2026 =
* Added: [new] Subscription tag in the WooCommerce product list.
* Fixed: Product edit UI issues on larger screens.
* Fixed: Different time zones being shown in different places.
* Fixed: Duplicate note entries by standardizing subscription notes and the creation event.
* Removed: Default subscription fields settings.
* Removed: Place Order Text settings.

= v1.5.0 - 18 march, 2026 =
* Added: Toolkit settings for hiding the frontend admin bar and restricting `/wp-admin` and `/wp-login.php` access for non-admin users.
* Added: Member Access discount rules for subscriber-only product discounts across products, categories, tags, cart, and checkout.
* Added: Member Access ecommerce rules for members-only product visibility and purchase restrictions.

= v1.4.0 =
* Added: [hot] When a user accepts any retention offer, he will get an email confirmation as well.
* Improved: [hot] System notes are now more detailed.
* Improved: Separated retention flow.
* Improved: Better UX.
* Improved: Improved member access.

= v1.3.0 =
* Added: [new] Notes are added after a user takes an offer from the retention flow.
* Added: [new] Already taken options are hidden in the next retention flow step.
* Improved: CSS improvements.
* Improved: Improved the retention flow UI in the customer portal.
* Fixed: The retention flow secondary modal does not show up.
* Fixed: Taking a retention offer does not update the next scheduled price.
* Removed: Early renew due to payment gateway limitations.

= v1.2.0 =
* Improved: Improved the AJAX select field and its CSS in the Restriction page.
* Fixed: Customer search not working in the Add New Subscription page.
* Fixed: Product search not working in the Restriction page.

= v1.1.0 =
* Added: [new] Content restriction module.
* Fixed: JS error and styling issues.

= v1.0.0 =
* Added: Initial release.
* Added: Subscription product creation and management.
* Added: Recurring billing system.
* Added: Customer subscription portal.
* Added: Email notifications.
* Added: Refund and proration system.

== Support ==

For setup help, feature guides, and troubleshooting, visit the [ArraySubs User Guides](https://support.arrayhash.com/arraysubs/).

For product information, visit [ArraySubs](https://arrayhash.com/deals/arraysubs).
