Skip to content

How to Create a WooCommerce Membership Site: Architecture Before Configuration

Define the member promise, commerce model, access evidence, lifecycle, denied experience, and operating owner before configuring rules.

Emran // ArrayHash21 min read

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:

  1. Promise: the ongoing outcome, privilege, identity, or resource that makes membership worth joining and renewing.
  2. Commerce: product, price, trial, tax, term, refund, renewal, and payment method.
  3. Record: the order, subscription, purchase, membership record, role, or feature value used as a source of truth.
  4. Access: conditions, target scope, precedence, denied action, and release schedule.
  5. Lifecycle: trial, active, grace, on-hold, pending cancellation, cancelled, expired, refunded, upgraded, downgraded, and rejoined behavior.
  6. Experience and operations: account portal, denied UX, recovery, support diagnosis, testing, audit, ownership, and rollback.

A membership house uses the promise as its foundation and gives commerce, record, access, lifecycle, portal, and operations distinct rooms.

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 modelPayment eventPossible access durationArchitecture risk
Free registrationno paymentindefinite or policy-basedrole becomes an ungoverned membership ledger
One-time purchaseone completed orderfixed term, lifetime, or product lifetimerefunds and ownership transfer are unclear
Fixed-termone or multiple chargesspecific duration or cohort endbilling term and access end drift apart
Recurring subscriptionrepeated renewalactive/paid-through policyfailure, grace, cancellation, and re-entry need explicit states
Lifetimeone paymentindefinite under stated policysupport and content cost outlive revenue
Tiered hybridone or more of the aboveentitlement-specificoverlapping 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.

A shop owner carries a payment key and an access key because buying and entering are related but different decisions.

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.

A real WooCommerce subscription product separates recurring billing fields from the access policy built later.

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 groupExamplesDefault visibilityRecovery exception needed?
Public discoveryhomepage, pricing, category pages, SEO introductionspublicn/a
Previewarticle excerpt, sample lesson, public productpublic with clear boundaryupgrade/login path
Member contentfull article, lesson, archive, videoqualifying membershipyes
Tier-specificPro downloads, workshop archive, API docsexact plan/featureyes
Account and recoverylogin, password reset, My Account, Pay Now, update methodreachable securelyalways
Legal and supportprivacy, terms, cancellation help, contactpublic or authenticated but ungated by paid statusalways
Staff-onlymoderation, fulfillment, reportscapabilities/administratornot 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.

The live Content Gate guide shows four implementation surfaces and the need to test allowed and denied users.

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.

A real ArraySubs post-type rule exposes content scope, archive visibility, and eligibility as separate decisions.

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 stateBilling meaningExample access policyCustomer routeRequired proof
Trialagreement in trialonboarding plus disclosed trial entitlementmanage/upgradecorrect trial product and end date
Activeeligible paid statefull plan entitlementaccount, switch, cancelproduct/status/feature match
Payment gracerenewal unpaid but recoverablefull or reduced temporary accessPay Now/update/authenticateactual grace deadline
On holdunresolved beyond active gracerestrict paid features; preserve identity/recoverypayment and supportroles/rules/caches changed
Pending cancellationwill end at paid-through boundarypreserve paid entitlement until documented endundo/rejoin when supportedexact period end
Cancelledagreement endedpublic/free/fallback onlyrejoinremote agreement also stopped
Expired/fixed-term endterm elapsedalumni, archive, or none by policyrenew/re-enrollend-date source
Refunded/charged backcommercial reversalpolicy and risk reviewsupportproduct/service delivery context
Upgraded/downgradedplan changedexact new entitlements without overlapportalproration/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 reasonUseful messagePrimary action
Logged outexplain member access brieflylog in
No qualifying membershipshow what membership unlockscompare/join
Wrong tiername the required entitlementupgrade or switch
Payment unresolvedstate actual subscription and deadlinePay Now/update/authenticate
Drip not reachedshow availability timing if policy permitsreturn on date/continue current lesson
Cancelled/expiredexplain current retained accessrenew/rejoin/support
Policy/risk blockminimal safe messagecontact support

One hallway ends at a bare lock while the better route signs login, payment recovery, upgrade, and support clearly.

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 fieldWhat to recordWhy it matters during an incident
Business promisethe member outcome and qualifying planprevents a technical rule from drifting away from the offer
Source evidenceproduct, variation, subscription state, purchase, role, or featurelets support trace the decision to a real record
Protected surfacecontent object, route, section, download, product, or external systemexposes gaps between the page and the underlying asset
Lifecycle transitionstrial, recovery, hold, cancellation, expiry, refund, switch, and rejointurns vague “active member” language into testable behavior
Recovery pathlogin, Pay Now, method update, rejoin, upgrade, and supportprevents the restriction from blocking its own remedy
Change controlowner, reviewer, evidence, release time, and rollback valuemakes 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:

  1. logged-out visitor;
  2. logged-in customer with no subscription;
  3. qualifying trial;
  4. qualifying active customer;
  5. active customer on the wrong plan or variation;
  6. on-hold customer;
  7. pending cancellation before the paid-through date;
  8. cancelled and expired customer;
  9. upgraded and downgraded customer;
  10. customer with two qualifying subscriptions;
  11. administrator/shop-manager bypass expectation;
  12. 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

DecisionAnswer before configurationFailure if omitted
Member promiseWhat changes for members each week/month/term?recurring charge without recurring value
Commercefree, one-time, fixed-term, recurring, or lifetime?billing accidentally defines access duration
Access sourcestatus, product, purchase, role, or feature?conflicting eligibility
Scopepage, section, branch, download, product, or feature?leaks or overblocking
Lifecycletrial, grace, hold, cancel, refund, expire?surprise lockout or unpaid access
Upgrade/downgradeeffective when, and which rights change?gaps or double access
Denied UXlogin, message, pricing, recovery, 403, or 404?dead end
Operationsowner, 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.

From plan to working store

Build the subscription system you just mapped

Start with the free ArraySubs core, then add Pro automation when the store needs supported automatic gateways and deeper operations.

No credit card required · Keep the same subscription records as you grow