This guide explains how to set up and manage Group Memberships in the Members Only plugin. Group Memberships is an optional extension that lets your subscribers purchase multi-seat plans and invite their own team members to share access to your restricted content — ideal for selling to companies, schools, families, and teams.
Enabling the Extension
Group Memberships is turned off by default. To enable it:
- Go to Members Only → Settings in the WordPress admin.
- Open the Extensions section.
- Check the box next to Group Memberships.
- Click Save Changes.
Once enabled, Members Only creates the database tables it needs and adds a Groups submenu under the Members Only admin menu.
Note: While at least one group subscription is still active, you won’t be able to disable the extension. This safeguard prevents members from losing access unexpectedly.
How Groups Work
A Group Membership is simply a Stripe subscription with a seat limit attached. When a customer purchases a group-enabled plan:
- A Group is automatically created and linked to the Stripe subscription.
- The purchaser becomes the Group Admin and occupies the first seat.
- The group is given a default name based on the purchaser’s display name (e.g. Jane’s Team). The Group Admin can rename it at any time.
- The Group Admin invites members, up to the seat limit, from their account dashboard.
Seats are shared between the Group Admin, active members, and pending invitations. A pending invitation reserves a seat until it is accepted, revoked, or expires, so a group can never exceed the number of seats it paid for.
Setting Up a Group Plan
A plan becomes a group plan when its Stripe Price has the members_only_max_seats metadata set. You can configure this from the WordPress block editor (recommended) or directly in Stripe.
Using the Block Editor
- Add or select a Stripe Checkout block on the page where you sell the plan.
- Select a product and price in the block sidebar (Inspector Controls).
- Open the Group Signup panel, check Enable group signup, and enter the Max seats included in the plan (minimum 2 — the Group Admin counts as one seat).
- Click Save to Stripe.
Saving updates the price in Stripe. New subscribers on that price gain access to group features; existing subscribers are not affected.
Setting Seats Directly in Stripe
You can also make a plan a group plan without the block editor by adding metadata to the price in your Stripe Dashboard:
- Key:
members_only_max_seats - Value: the desired seat count (e.g.
10)
Any subscription purchased on that price will automatically become a group subscription. The seat count includes the Group Admin — a value of 10 means the admin plus 9 invited members.
Advanced: the same setting can be applied programmatically by sending a POST request to /wp-json/members-only/v1/stripe/prices/{price_id}/group-settings with a max_seats parameter (requires an administrator and a valid nonce).
Changing or Removing Group Settings
Once a price is designated as a group plan and saved, the block editor shows it as enabled with an Edit in Stripe link, but it cannot be reverted to a single-user plan from within WordPress. This prevents accidental loss of group functionality for existing subscribers. To change the seat count or remove group behavior, edit the price’s members_only_max_seats metadata in the Stripe Dashboard.
Because the seat limit lives on the price (not the subscription), all subscriptions using the same price share the same limit — create separate prices if you want to offer different seat counts. Stripe data is cached for about 60 minutes, so metadata changes may take up to an hour to take effect unless you clear the cache.
How Members Get Access
Group members receive the same content access as individual subscribers. A user has active group access when they belong to a group whose subscription is active, trialing, or past due — or that is scheduled to cancel but is still within its paid period. Access follows the subscription’s lifecycle:
- Active, trialing, or past due: full access for all members, and invitations can be sent.
- Scheduled to cancel: members keep access until the end of the current billing period. Invitations can still be sent while the status remains active, trialing, or past due and seats are available.
- Fully ended or deleted: members lose access immediately (unless they have their own subscription or an access pass). The group record remains in WordPress so you can delete it manually.
- Reactivated: group caches are cleared and access is restored for all members.
Managing Groups
View and manage every group on your site under Members Only → Groups.
Groups List
The Groups list shows every group along with its admin, seat usage, subscription status, and creation date.
| Column | Description |
|---|---|
| Group Name | The name of the group (sortable). Use the Edit row action to open it. |
| Admin | The Group Admin, linked to their WordPress user profile. |
| Seats | Usage shown as used / max (e.g. 3 / 10). |
| Status | The Stripe subscription status (active, trialing, past_due, canceled, etc.). |
| Created | When the group was created (sortable). |
Use the search box to filter by group name. The list is paginated.
Editing a Group
Click a group name (or its Edit action) to open the group edit page. From here you can:
- Edit the group name and save changes.
- View the Group Admin, with a direct link to their WordPress user profile.
- Monitor seat usage — displayed as used / total (e.g. 3 / 10). This count includes the Group Admin and any pending invitations that reserve seats until accepted, revoked, or expired.
- Open the Stripe subscription — the sidebar links directly to the subscription in your Stripe Dashboard.
- View and remove members — the Members section lists all current members. Click Remove next to any non-admin member to immediately revoke their access and free up a seat. The Group Admin is labeled Admin and cannot be removed.
- Invite a member by email — send an invitation on behalf of the group, subject to available seats and an active subscription.
- Resend or revoke pending invitations — the Pending Invitations section shows all outstanding invitations with their sent and expiration dates. Resending sends a fresh email and resets the 7-day expiration window; revoking cancels the invitation and immediately frees the reserved seat.
Deleting a Group
From the Groups list, use the Delete row action to permanently remove a group. This removes the group record, all member relationships, and all pending invitations. It does not cancel the associated Stripe subscription — handle that separately in your Stripe Dashboard if needed.
Where Groups Appear in the Admin
When the extension is enabled, group information surfaces in several places:
- Dashboard (Members Only → Dashboard) — a Groups stat card shows the total number of groups and how many have active members, the recent activity feed includes group events, and Quick Links includes a shortcut to the Groups list.
- Members list (Members Only → Members) — group members appear with an Active membership status even without a personal subscription, and the Membership column links to the group they belong to.
- User profiles (Users → Edit User) — a Group Memberships section lists any groups the user administers and any groups they belong to, each with status and a link.
Invitations
Invitations can be sent by the Group Admin from their account dashboard, or by you from the group edit page. A few things to know:
- The invitee receives an email with the subject “You’ve been invited to join {Group Name} on {Site Name}” containing a secure, single-use acceptance link.
- Invitations are valid for 7 days. A scheduled daily task marks expired invitations, which then stop counting toward the seat limit. Resending resets the window to 7 days.
- The invitee must accept using the same email address the invitation was sent to (matching is case-insensitive).
- An invitation is rejected if the email is invalid, no seats are available, the email belongs to the Group Admin, the user is already a member, or a pending invitation already exists for that email.
Troubleshooting
- A group wasn’t created after purchase: confirm the Stripe price has the
members_only_max_seatsmetadata, confirm the extension is enabled, and make sure your Stripe webhook is configured and delivering events (group creation happens at checkout and via webhook). - Members can’t access content: confirm the group’s subscription is active, trialing, or past due; confirm the user appears in the group’s member list; confirm their account email matches the invitation email; and try clearing the user’s cache from the Members list.
- Invitations aren’t being received: confirm your site can send email, check the invitee’s spam folder, and make sure the page containing your Account Dashboard block is published — invitation links point to it.
- The seat count looks wrong: remember that the Group Admin and every pending invitation each occupy a seat, and that Stripe subscription data is cached for about 60 minutes after a metadata change.
Frequently Asked Questions
Q: What happens if a subscription is canceled or a payment fails?
A past-due subscription (failed payment) keeps members’ access while Stripe retries, so a failed payment doesn’t cut anyone off immediately. If the admin cancels at period end, the group keeps access until that date and then members lose access. If a subscription is canceled immediately in Stripe, access ends right away. You can always manage or force-cancel a subscription from your Stripe Dashboard.
Q: Can a Group Admin be changed?
The Group Admin is tied to the Stripe subscription owner and cannot be reassigned through the WordPress admin UI. The group edit page links to the Stripe subscription, which can be used to manage or migrate it in Stripe if needed. Contact us if you need help with this operation.
Q: Can I offer unlimited seats?
A specific number must be defined — the seat count is stored as a numeric value in the price’s metadata in Stripe. If you want effectively “unlimited” seats, set this to a very high number.
