To create a WooCommerce membership site, define the member promise first, then separate six jobs: payment collection, the subscription or purchase record, access conditions, protected-content scope, lifecycle policy, and the customer portal. Choose the WordPress plugin stack only after mapping how signup, payment failure, cancellation, expiration, and re-entry change access.
A subscription is a billing/lifecycle record. A membership is an access relationship. An entitlement is a machine-evaluable right. ArraySubs can evaluate those records directly, but the architecture still has to say which record controls which surface and what happens when state changes.
Key takeaways
- Start with the continuing member outcome, not plugin settings or tier names.
- Separate billing, membership, roles, and entitlements even when one plugin evaluates all of them.
- Use the narrowest reliable access condition and target; WordPress roles alone are usually too coarse.
- Keep login, account, payment recovery, privacy, and support routes reachable when premium content is denied.
- Launch one thin slice through a lifecycle test matrix before expanding site-wide rules.
What systems are inside a WooCommerce membership site?
A membership site is not simply recurring billing plus a padlock. It is a policy system that converts a commercial event into an access decision and keeps that decision correct throughout the customer lifecycle.
Use this six-layer model:
- Promise: the ongoing outcome, privilege, identity, or resource that makes membership worth joining and renewing.
- Commerce: product, price, trial, tax, term, refund, renewal, and payment method.
- Record: the order, subscription, purchase, membership record, role, or feature value used as a source of truth.
- Access: conditions, target scope, precedence, denied action, and release schedule.
- Lifecycle: trial, active, grace, on-hold, pending cancellation, cancelled, expired, refunded, upgraded, downgraded, and rejoined behavior.
- Experience and operations: account portal, denied UX, recovery, support diagnosis, testing, audit, ownership, and rollback.

If any layer is implicit, the site eventually produces a surprising lockout or access leak. A paid order might exist without the expected role. A role might remain after the paid subscription ends. A recovery page might be protected by the same rule the customer must resolve.
What member promise and business model are you selling?
Write the member promise in one sentence:
Members receive [continuing outcome] through [recurring proof of value]
for as long as [access-duration policy].
“Access to premium content” is too vague. “Two expert research packs and one live workshop every month, plus a searchable archive while membership remains eligible” is testable. The content calendar, support promise, access duration, and cancellation message can all be evaluated against it.
Then select the commercial model independently:
| Commerce model | Payment event | Possible access duration | Architecture risk |
|---|---|---|---|
| Free registration | no payment | indefinite or policy-based | role becomes an ungoverned membership ledger |
| One-time purchase | one completed order | fixed term, lifetime, or product lifetime | refunds and ownership transfer are unclear |
| Fixed-term | one or multiple charges | specific duration or cohort end | billing term and access end drift apart |
| Recurring subscription | repeated renewal | active/paid-through policy | failure, grace, cancellation, and re-entry need explicit states |
| Lifetime | one payment | indefinite under stated policy | support and content cost outlive revenue |
| Tiered hybrid | one or more of the above | entitlement-specific | overlapping sources grant unintended access |
WooCommerce Memberships can grant access by registration, manual assignment, or product purchase, with unlimited, set-duration, or fixed-date membership lengths (WooCommerce Memberships Plans). That proves membership does not inherently mean recurring payment.
What is the difference between billing, subscription, membership, roles, and entitlements?
- A subscription records an agreement and lifecycle that can renew, fail, pause, cancel, or expire.
- A membership records or evaluates an access relationship.
- A WordPress role is a bundle of capabilities that controls what a user can do on the platform (WordPress roles and capabilities).
- An entitlement is a specific right such as “Course Pro,” “five seats,” “downloads enabled,” or “priority support.”
- An access rule turns one or more records into an allow/deny decision for a defined target.

There are two common architectures.
Separate membership-ledger architecture
WooCommerce Memberships plus Woo Subscriptions can use a distinct user-membership record linked to a subscription. Official integration documentation describes recurring memberships, trials, switching, and access linked to subscription state (WooCommerce Memberships and Subscriptions integration). This can be useful when support needs an independent membership object with dates, notes, and manual control.
Integrated dynamic-access architecture
ArraySubs 1.8.11 does not create a separate membership plan/user-membership custom post type. It evaluates current WordPress, WooCommerce, purchase, subscription, role, and—when Pro Feature Manager data exists—feature evidence dynamically.
Neither pattern is universally superior. Pick the one whose source of truth and support model match the business. Do not call them the same architecture merely because both can show protected content.
How should the product and billing agreement be defined?
The WooCommerce product establishes the commercial promise: price, interval, length, trial, and sign-up fee. That should be decided before it becomes an access condition.

Document:
- product and variation IDs used as stable access sources;
- monthly/annual equivalence or tier differences;
- trial access and high-cost entitlement restrictions;
- fixed-term versus indefinite renewal;
- refund, cancellation, and paid-through rules;
- manual versus automatic renewal gateway;
- tax and invoice behavior;
- what happens when a product is unpublished, out of stock, or replaced.
Do not use a marketing label like “Pro” as the only machine key. Product IDs and feature keys need controlled change procedures.
Which content and commerce surfaces should be public or gated?
Create a content inventory before writing rules.
| Inventory group | Examples | Default visibility | Recovery exception needed? |
|---|---|---|---|
| Public discovery | homepage, pricing, category pages, SEO introductions | public | n/a |
| Preview | article excerpt, sample lesson, public product | public with clear boundary | upgrade/login path |
| Member content | full article, lesson, archive, video | qualifying membership | yes |
| Tier-specific | Pro downloads, workshop archive, API docs | exact plan/feature | yes |
| Account and recovery | login, password reset, My Account, Pay Now, update method | reachable securely | always |
| Legal and support | privacy, terms, cancellation help, contact | public or authenticated but ungated by paid status | always |
| Staff-only | moderation, fulfillment, reports | capabilities/administrator | not a commercial membership rule |
ArraySubs currently supports per-post restrictions, post types and taxonomy content, URL patterns, partial content, protected downloads, shop/product access, discounts, and role mapping. This means scope can be precise—but overlapping rules can also create conflicts.
Use the narrowest reliable target:
- protect a section instead of a whole page when discovery content should remain public;
- protect selected post types or taxonomy branches instead of a broad URL wildcard when WordPress semantics are available;
- use exact or prefix URL rules for external/custom routes that do not map cleanly to post objects;
- protect downloadable delivery, not merely the page that links to it;
- restrict purchase and catalog visibility separately from content reading.
How do ArraySubs content-gating surfaces fit the architecture?
Current ArraySubs core provides multiple partial-gating integration surfaces: Elementor, Gutenberg, shortcode, and PHP/programmatic helpers.

Partial gating is a rendering decision. The condition still needs a stable access source, and the protected asset must not leak through another route. A hidden Elementor container does not automatically protect a direct file URL or REST response.
For broad rules, current post-type access includes a target scope, archive behavior, condition logic, denied action, and optional schedule.

Rule changes are live policy changes. Editing a shared rule can immediately affect existing customers; assign an owner, capture before/after evidence, and maintain rollback values.
How should status changes affect membership access?
Create a lifecycle table before configuration. The table below is a worksheet, not a universal policy.
| Lifecycle state | Billing meaning | Example access policy | Customer route | Required proof |
|---|---|---|---|---|
| Trial | agreement in trial | onboarding plus disclosed trial entitlement | manage/upgrade | correct trial product and end date |
| Active | eligible paid state | full plan entitlement | account, switch, cancel | product/status/feature match |
| Payment grace | renewal unpaid but recoverable | full or reduced temporary access | Pay Now/update/authenticate | actual grace deadline |
| On hold | unresolved beyond active grace | restrict paid features; preserve identity/recovery | payment and support | roles/rules/caches changed |
| Pending cancellation | will end at paid-through boundary | preserve paid entitlement until documented end | undo/rejoin when supported | exact period end |
| Cancelled | agreement ended | public/free/fallback only | rejoin | remote agreement also stopped |
| Expired/fixed-term end | term elapsed | alumni, archive, or none by policy | renew/re-enroll | end-date source |
| Refunded/charged back | commercial reversal | policy and risk review | support | product/service delivery context |
| Upgraded/downgraded | plan changed | exact new entitlements without overlap | portal | proration/effective date |
WooCommerce subscription statuses document that active can grant special access while on-hold, cancelled, and expired can remove it through integrations (WooCommerce subscription statuses). Apply that principle carefully; actual ArraySubs conditions and role mappings decide ArraySubs access.
Current ArraySubs default “active subscription” conditions include active and trial. Rules can explicitly target other statuses. Role mapping can keep or remove roles on hold and remove ended-state roles when no other qualifying active subscription needs them. Therefore, on-hold access is a policy and configuration choice—not a universal behavior.
How should denied, not-yet-available, and expired experiences differ?
Do not send every denied user to the same generic pricing page.
| Denial reason | Useful message | Primary action |
|---|---|---|
| Logged out | explain member access briefly | log in |
| No qualifying membership | show what membership unlocks | compare/join |
| Wrong tier | name the required entitlement | upgrade or switch |
| Payment unresolved | state actual subscription and deadline | Pay Now/update/authenticate |
| Drip not reached | show availability timing if policy permits | return on date/continue current lesson |
| Cancelled/expired | explain current retained access | renew/rejoin/support |
| Policy/risk block | minimal safe message | contact support |

WooCommerce and MemberPress documentation both warn, in different contexts, against rules that make account and recovery routes unusable. Keep My Account, Pay Now, update method, login/logout, password reset, checkout, privacy, support, gateway returns, and webhooks outside broad paid-content gates.
How should tiers, dripping, downloads, and features relate?
Use product/variation conditions when a commercial plan directly grants a simple set of access. Use feature entitlements when several products should grant the same right or when limits/values must be combined. Use roles for compatibility with WordPress plugins that understand capabilities but do not understand subscriptions.
For dripping, state the trigger and time math. Current ArraySubs rule schedules on post-type, URL, download, shop, and discount rules use the earliest qualifying active/trial subscription start, support days/weeks/months, and currently treat a month as exactly 30 days. The inspected UI did not expose a fixed-calendar-date drip trigger or an automatic “content unlocked” email.
Protected downloads need authorization at delivery time. Catalog/page hiding alone is not enough if a static file remains public. Shop-access rules should distinguish viewing from buying and should keep public exceptions and account routes reachable.
See Membership Level Strategy and Content Dripping Strategy for deeper policy design.
What does current ArraySubs implement in core and Pro?
Current core includes:
- subscription/purchase/status/role/lifetime-spend conditions;
- nested AND/OR groups;
- per-post, post-type, taxonomy, URL, partial-content, download, shop, discount, and role-mapping surfaces;
- timed rules relative to a qualifying subscription start;
- manual renewal invoices and membership lifecycle policy.
Pro responsibilities relevant here include:
- Feature Manager values evaluated as sum, max, or any;
- Fixed Period Membership for absolute or annually recurring term cutoffs and enrollment windows;
- automatic recurring gateways such as Stripe, PayPal, and Paddle.
Pro is not required for basic Members Access in the inspected current version. Conversely, ArraySubs is not a native view-count/metered paywall, learning management system, arbitrary remote community authorization engine, or independent user-membership ledger.
Worked architecture: premium resource library
Promise: two expert resources and one member workshop each month.
Commerce: monthly and annual variations of one subscription product.
Record: active/trial subscription to either variation. A Pro-only library could additionally require a feature such as Research Library = Yes.
Scope: public article introductions; gated resource sections; protected /library/ routes; downloadable templates; member workshop archive.
Lifecycle: onboarding resources during trial; expensive archive only when disclosed; account and Pay Now always reachable; active/on-hold policy documented; access through paid-through cancellation boundary only when actual status/effective date supports it.
Drip: relative to the earliest qualifying subscription start; rejoin behavior chosen deliberately.
Operations: rule inventory, guest/member/cache tests, order/subscription timeline, support runbook, and rollback owner.
The implementation details belong in the combined-conditions recipe, URL-prefix lockdown recipe, and inline content-gating recipe.
Who should own the membership architecture after launch?
A membership site becomes fragile when billing belongs to finance, protected content belongs to editorial, access rules belong to a developer, and nobody owns the complete outcome. Assign one accountable policy owner who can approve the relationship among all four. That person does not need to perform every change, but must be able to answer why a user has access, which record granted it, and how to reverse an incorrect decision.
Create a small operating record for every access policy:
| Operating field | What to record | Why it matters during an incident |
|---|---|---|
| Business promise | the member outcome and qualifying plan | prevents a technical rule from drifting away from the offer |
| Source evidence | product, variation, subscription state, purchase, role, or feature | lets support trace the decision to a real record |
| Protected surface | content object, route, section, download, product, or external system | exposes gaps between the page and the underlying asset |
| Lifecycle transitions | trial, recovery, hold, cancellation, expiry, refund, switch, and rejoin | turns vague “active member” language into testable behavior |
| Recovery path | login, Pay Now, method update, rejoin, upgrade, and support | prevents the restriction from blocking its own remedy |
| Change control | owner, reviewer, evidence, release time, and rollback value | makes a live policy edit reversible |
Support also needs a repeatable diagnostic trace. Start with the customer, identify every qualifying subscription or purchase, resolve the current lifecycle state and dates, evaluate the exact condition tree, identify the first applicable rule, inspect its schedule, and then check cache and delivery behavior. Record the first failing step rather than “fixing” the account with a manual role that may conceal the defect.
Treat rule changes like application releases. A renamed product, feature key, route prefix, or role can alter access without changing the public offer. Review dependencies before the edit, test a thin slice with normal customer accounts, keep the previous values, and schedule a follow-up check after caches and background lifecycle jobs have run. Editorial, commerce, engineering, and support should all know where this operating record lives.
A launch is operationally ready only when the team can demonstrate three things without relying on the original implementer: grant the correct access from a documented source record, explain a denial from current evidence, and roll back a bad policy without opening unrelated content. That is the difference between a configured plugin and a maintainable membership system.
How should a WooCommerce membership site be launched?
Build one thin slice first: one real product, one qualifying customer, one protected page/section, one denied experience, one payment, and the complete lifecycle.
Test at least:
- logged-out visitor;
- logged-in customer with no subscription;
- qualifying trial;
- qualifying active customer;
- active customer on the wrong plan or variation;
- on-hold customer;
- pending cancellation before the paid-through date;
- cancelled and expired customer;
- upgraded and downgraded customer;
- customer with two qualifying subscriptions;
- administrator/shop-manager bypass expectation;
- fresh cached guest and member sessions.
For each identity, verify page body, archive/listing, direct URL, REST/Store API where relevant, downloads, purchase behavior, customer account, recovery route, and denied message. Do not expand site-wide until the thin slice passes and a rollback is documented.
Architecture worksheet
| Decision | Answer before configuration | Failure if omitted |
|---|---|---|
| Member promise | What changes for members each week/month/term? | recurring charge without recurring value |
| Commerce | free, one-time, fixed-term, recurring, or lifetime? | billing accidentally defines access duration |
| Access source | status, product, purchase, role, or feature? | conflicting eligibility |
| Scope | page, section, branch, download, product, or feature? | leaks or overblocking |
| Lifecycle | trial, grace, hold, cancel, refund, expire? | surprise lockout or unpaid access |
| Upgrade/downgrade | effective when, and which rights change? | gaps or double access |
| Denied UX | login, message, pricing, recovery, 403, or 404? | dead end |
| Operations | owner, QA, support, evidence, rollback? | untraceable incident |
When is ArraySubs not the best membership architecture?
Choose another or additional system when the business requires a first-class independent membership record with manual dates/notes separate from subscriptions; a native article-view meter; LMS prerequisites, grading, and certificates; complex remote community entitlements; or bespoke regulated continuity and notice controls.
ArraySubs is a fit when WooCommerce products, purchases, and subscriptions should directly drive multiple access surfaces without a second membership ledger—and the team can test the real theme, page builder, cache, gateway, and lifecycle stack.
Final recommendation
Build the policy before the paywall. Define the continuing promise, select the commercial model, name the billing and access records, inventory every target, decide lifecycle behavior, design recovery UX, and prove one thin slice through the full state matrix. Only then should rules be expanded across the site.
After the architecture and launch tests are documented, review ArraySubs Pro pricing and the broader member experience feature set.
Frequently asked questions
Can WooCommerce core create subscriptions and memberships by itself?
WooCommerce core sells products and manages orders, but recurring subscription lifecycle and commercial membership access require additional functionality or plugins.
Do I need both recurring billing and content restriction?
Only if the business promise needs both. A lifetime membership may use one payment; a recurring subscription may deliver physical goods without protected content.
Should WordPress roles represent membership levels?
Roles are useful compatibility and capability bundles, but they are usually too coarse to be the authoritative paid-membership ledger. Derive them from a stronger commercial/access record when possible.
Can ArraySubs protect only part of a page?
Current core includes Gutenberg, Elementor, shortcode, and programmatic partial-content surfaces. Test direct asset/API access separately.
Does ArraySubs support native metered paywalls?
Current source review did not find a built-in article-view counter/meter. A meter needs its own identity, counting, privacy, cache, and bypass architecture.
Is ArraySubs Pro required for basic membership access?
Not in the inspected current version. Basic access conditions and major gate surfaces are in core; Pro adds capabilities such as automatic gateways, Feature Manager, and Fixed Period Membership.
Author, technical review, and verification environment
Author: Emran, ArrayHash — product and editorial work across WooCommerce subscription and membership architecture.
Technical reviewer: ArraySubs Engineering Team — review scope includes Members Access surfaces, rule precedence, scheduling, role lifecycle, Feature Manager, product billing, and recovery routes.
Verification environment: Source and live UI review of ArraySubs 1.8.11 and ArraySubs Pro 1.1.2 on July 16, 2026, plus current WooCommerce, WordPress, Google Search, and MemberPress documentation. No new live membership or customer was created on the mirror site.
Disclosure, limitations, and update log
- Commercial disclosure: ArraySubs is an ArrayHash product. Official WooCommerce and neutral MemberPress architecture examples are included, and ArraySubs limitations are stated explicitly.
- Limitations: Themes, builders, caching, gateways, third-party files/APIs, and lifecycle configuration can change access behavior. Google paywall markup does not guarantee ranking.
- July 16, 2026: First publication. Verified current access surfaces, dynamic record model, schedule semantics, role lifecycle, core/Pro boundary, live rule UI, and launch test matrix.
Continue from strategy to setup
Use a recipe when the model is settled
These articles own the decision and operating model. The ArraySubs feature map and recipes cover the exact product, billing, and customer-workflow configuration.
Written by
Emran // ArrayHash
Research and practical guidance for WooCommerce subscription operators and implementation teams.
Technical review
ArraySubs Engineering Team
Reviewed against current ArraySubs code, product documentation, and the linked primary platform sources.




