Paid Memberships Pro Invite Only Membership - WordPress Plugin
Require an invite code to sign up for the specified Membership Levels (works for free or raid levels). After membership check out, the member is given invite codes to share. The Invite Only Add On allows you to restrict membership signups for specific membership levels and require an invite code.

Plugin Features
After completing their membership check out, your member will receive a unique invite code that they can share with others. You can specify the number of uses on the invite code, make it unlimited, or give the member multiple single-use codes.
A list of used/unused invite code(s) is displayed on the Membership Account page, allowing a member to see who has used their code to register and manage the unused codes tied to their account.
Specifications:
| Release date: | 11-10-2016 | |
| Last updated: | 29-09-2024 | |
| Type: | Paid | |
| License: | GPL | |
| Subject: | Access & Security for Paid Memberships Pro | |
| Compatibility: | W5.x W6.x | |
| Includes: | Plugin | |
| Language packs: |
|
|
| Developer: | Paid Memberships Pro | |
| Rating: | ||
Share with your friends!
Paid Memberships Pro Invite Only Membership: Setup and Usage Guide
Paid Memberships Pro Invite Only Membership is not designed for standard open registration. It is intended for sites where access to a membership level must begin with an invitation. This guide explains how to add the plugin to an existing WordPress and Paid Memberships Pro site, which levels to protect with codes, how to give invitations to existing members, where to verify the outcome, and why some settings are best tested on a site copy first.
This article does not repeat the product's short description. The practical workflow matters more here: how selected level IDs become a requirement to enter a code, what happens after a successful membership checkout, why renewals do not automatically generate new invitations, how an administrator can support members manually, and why several common issues can look like "the code does not work."
The plugin relies on Paid Memberships Pro, so many actions take place through existing WordPress screens, membership pages, safe configuration code, and checkout testing rather than on a separate settings page. This distinction matters: Invite Only Membership controls entry to selected levels, but it does not replace PMPro's core configuration for payments, pages, emails, and restricted content.
How Invitation-Only Registration Works in PMPro
The basic flow is straightforward. A visitor chooses a membership level, reaches the Paid Memberships Pro checkout page, and must enter a valid invite code if that level is included in the protected-level list. After completing membership checkout successfully, the new member may receive invitation codes to share with other people. The site then grows through a controlled chain of trusted invitations rather than random registrations.
Unlike ordinary content restriction, this checks more than access to an article, course, or members-only section. The plugin affects the point at which someone joins a level. Treat it as an access-control layer before membership checkout: first the code, then the standard PMPro form, then confirmation, content access, and ongoing code management in the member account.
The official add-on page confirms several key capabilities: you can require a code for selected free or paid levels, create single-use or reusable codes, show members used and unused codes on the Membership Account page, and add codes to a specific user through the user-editing screen in the WordPress admin area. These features form one working flow rather than an unrelated feature list.
The Three Roles in the Process
To avoid confusion during setup, it helps to separate the roles. The administrator decides which levels require an invitation and how many codes to issue. An existing member receives codes after an initial successful membership checkout and sees them in their account. A new visitor uses a code on the Membership Checkout page when joining a protected level.
This approach works well for private clubs, educational cohorts, professional communities, beta access, private content libraries, partner programs, and local associations. In every case, decide in advance who is allowed to invite new people. If every existing member receives too many codes, invitation-only registration quickly becomes ordinary open registration with an extra field.
What Changes for Visitors
An invitation-code field appears on the checkout page. If the selected level does not require a code, checkout proceeds normally. If the level is protected, the visitor must enter a code and complete the standard PMPro form. For a paid level, an invitation does not cancel payment or replace the payment gateway. It only allows the visitor to begin checkout for that level.
Test the flow as a regular visitor. Open the page in a private browsing window, select the appropriate level, and follow the process through to the form. An administrator with an active session often sees the site differently, so checking only from the admin area does not prove that invitations work for new users.
What Changes for Existing Members
After an initial successful membership checkout, a member receives codes if their level is listed as a code-issuing level. They can view those codes on the Membership Account page. Do not confuse two separate lists: one set of levels requires a code to join, while another set issues a code after checkout. Their behavior may match by default, but in practice they are often kept separate.
For example, a private club might require an invitation for the "Member" level while issuing codes only to the "Ambassador" level. In that setup, most members gain access but cannot expand the community. Another option is for a paid "Founding Member" level to issue one single-use code while a standard level does not issue invitations at all. That model can help preserve control during an early launch.
When This Plugin Fits - and When Another Access Model Is Better
Invite Only Membership is especially useful when the value of membership depends on audience quality. If a site sells a public course, an open library, or a standard content subscription, requiring a code may hurt conversions. But when a project is built around trust, an internal community, a limited member base, or a staged launch, an invitation code becomes an appropriate gate.
The right question before installation is: "What exactly are we protecting with the code - content, payment, community quality, or the pace of growth?" If the only goal is to hide materials from non-members, PMPro's standard content restriction is enough. If you need to close entry to the level itself, this plugin solves the more specific problem.
Use Cases Where Invitations Add Real Value
For a private club, an invitation works as light moderation. A member shares a code with someone they know, while an administrator can see who has received additional codes when necessary. For an educational program, a code can limit enrollment to students in a specific cohort. For a professional community, a code helps prevent an open link to a paid level from being published in promotional channels.
- Private community. New members arrive through recommendations from existing members rather than random registration.
- Limited product launch. The team opens access in small waves and monitors load, feedback quality, and payment behavior.
- Partner or club access. Codes are issued to organizers, instructors, moderators, or ambassadors.
- Free level with an entry filter. Even when a level is free, joining can be restricted by code to avoid mass registration.
- Paid level with pre-screening. An invitation permits the user to begin checkout, while payment still goes through PMPro.
Use Cases Where the Plugin May Be Unnecessary
If the site depends on maximizing registrations, a code field will reduce conversion. If you need to sell corporate seats with management of subordinate accounts, consider Group Accounts instead, because it provides a parent account and child members. If applications must be reviewed manually before activation, invitation rules do not replace a full user-approval workflow.
Do not use Invite Only Membership as universal spam protection. PMPro has separate security and checkout-form protection settings. An invitation can reduce random registrations for a protected level, but it does not replace proper protection for forms, email, payments, roles, or login pages.
What to Check Before Installing on a Live Site
Before installation, make sure that core Paid Memberships Pro functionality is already working. Invite Only Membership does not create membership levels, checkout pages, account pages, payments, or content restrictions from scratch. It adds code validation to an existing joining flow. If that base flow is broken, invitations will only make diagnosis harder.
Core PMPro Pages
Check Memberships > Settings > Pages. A working flow needs assigned Membership Levels, Membership Checkout, Membership Confirmation, and Membership Account pages. If these pages were created by the setup wizard, open each one on the public site and make sure the PMPro block or shortcode renders without errors.
The checkout page should allow normal level selection. For paid levels, also test the payment gateway in a safe test mode if your configuration supports it. For free levels, make sure a user is created, receives membership, and reaches the confirmation page.
Level IDs
Invite Only Membership is configured through PMPro level IDs. You can find them under Memberships > Settings > Levels. Record the IDs of levels that must require a code, and separately record the IDs of levels that should issue codes. One incorrect number changes the entire setup: a user may see the field where it does not belong, or may complete checkout without an invitation.
Do not guess a level ID from its position in the list. Levels may have been created, deleted, or moved, so their visible order does not have to match their IDs. Open the Levels screen and record the values in a working table: level name, ID, whether a code is required, whether it issues codes, how many codes to issue, and how many times each code may be used.
| What to record | Why it matters | Common mistake |
|---|---|---|
| Protected level ID | The plugin will require a code at checkout for this exact level. | The administrator enters the ID of a similar test level. |
| Code-issuing level ID | After initial checkout, a member of this level receives invitations. | Codes are issued to everyone when they should be limited to moderators or ambassadors. |
| Number of codes | Sets the growth pace of the private community. | Too many codes are generated, and checkout slows down noticeably. |
| Uses per code | Defines whether an invitation is single-use, limited-use, or unlimited. | A code accidentally becomes reusable when single-use access was intended. |
Email, Caching, and User Roles
Because the user journey includes checkout, confirmation, and an account page, check more than the invite-code field. Email delivery must work, the Membership Account page must display correctly, and access to protected content must be clear after checkout. If the site uses aggressive caching, checkout, account, and confirmation pages must be served dynamically. Otherwise, visitors may see outdated form or page states.
Also review roles and admin-area access. Regular members should not enter the WordPress admin area unless necessary. PMPro includes settings related to subscriber access to the WordPress Dashboard and Toolbar. For a private club, it is usually more sensible to keep member management on the public side of the site and limit administrative actions to the site owner or membership manager.
Installation and Initial Testing Without Putting Registration at Risk
The official instructions offer two ways to install the add-on: through Memberships > Add Ons in the WordPress admin area or manually through Plugins > Add New > Upload Plugin. A premium add-on requires the appropriate Paid Memberships Pro access, but this guide does not cover purchasing, entering a key, or bypassing activation. The focus is safely configuring a product you already have.
The best approach is to test the plugin on a site copy first. In membership projects, even a small change to the checkout form can affect registration, payments, and user support. If you do not have a copy, choose a non-public test level and configure invitations only for that level. Enable them on live levels only after the test flow works without errors.
Installing Through the Add Ons Screen
- Open
Memberships > Add Onsin the WordPress admin area. - Find the Invite Only Membership add-on by name or by its invitation-only registration purpose.
- Click
InstallorInstall Nowif the card is available in your configuration. - After installation, activate the plugin from the same screen or through
Plugins. - Clear the cache for checkout and account pages if the site uses a caching plugin or server-side caching.
After activation, do not expect a large settings page. According to the official documentation, the settings are defined through global variables and constants in a safe location for custom PMPro configuration. This may be Code Snippets, a separate site-settings plugin, or an appropriate configuration file if you are comfortable working with it.
Manual ZIP Installation
If the add-on is installed manually, use the standard WordPress path: Plugins > Add New > Upload Plugin. Upload the ZIP archive, install it, and activate it. For PMPro add-ons in general, the developer warns that a ZIP from an open repository may give its folder a branch suffix, which can make future updates harder to track. For a production site, it is better to use the official PMPro installation and update method available to you.
After manual installation, check the active plugins list. It should include both Paid Memberships Pro and Invite Only Membership. If only the add-on is active without core PMPro, the intended flow cannot work because there are no membership levels, checkout process, or account page.
First Check After Activation
Before adding configuration code, run a neutral check: open a normal membership level that should not require an invitation and make sure checkout has not changed unexpectedly. Then prepare a test level that will be protected by a code. This order helps confirm that activation did not break core PMPro and that later behavior is connected specifically to the selected settings.
Quick checkpoint: the plugin is active, core PMPro pages open correctly, a normal level can still be purchased as before, and the test level is ready for invitation-only access. If something breaks before code settings are added, fix core PMPro first instead of adding more constants.
Detailed Invitation Configuration with Levels, Codes, and Limits
The defining feature of Paid Memberships Pro Invite Only Membership is that its settings are not collected in a separate visual form. The official page documents configuration through global variables and constants: $pmproio_invite_required_levels, $pmproio_invite_given_levels, PMPROIO_CODES, and PMPROIO_CODES_USES. This makes the plugin flexible, but it also requires careful setup.
A safe approach is to describe the invitation model in plain language first, convert it into level IDs, and only then add the code. Do not begin by copying a snippet. First decide which levels are closed, which levels receive codes, and what growth rate is acceptable.
Where to Place the Configuration
The developer recommends storing custom PMPro settings separately from theme and plugin files. For site owners, Code Snippets is often convenient because the snippet can be enabled and disabled from the admin area. For developers, a small dedicated settings plugin is more stable because it does not depend on the active theme. Directly editing core plugin or theme files is a poor choice because updates will overwrite the changes.
Some constants can be defined in wp-config.php, but for mixed configuration that uses global variables for levels, a separate PHP snippet loaded by WordPress is usually more convenient. If you are unsure where code belongs on your site, start with Code Snippets and enable the snippet only after checking its syntax.
Basic Example for One Protected Level
The following example uses the variables and constants documented officially. It protects one level, gives codes to members of that same level, creates one code after initial checkout, and makes each code single-use. Replace 1 with the actual ID of your level.
<?php
/**
* Invite Only Membership configuration for one PMPro level.
* Place this snippet in Code Snippets or a dedicated settings plugin.
*/
global $pmproio_invite_required_levels;
global $pmproio_invite_given_levels;
// Levels that require an invite code on the checkout page.
$pmproio_invite_required_levels = array( 1 );
// Levels whose members receive invite codes after initial checkout.
$pmproio_invite_given_levels = array( 1 );
// Number of codes to create for a new member.
define( 'PMPROIO_CODES', 1 );
// Number of times each code can be used. A value of 1 makes the code single-use.
define( 'PMPROIO_CODES_USES', 1 );
After saving, test the flow. Open the protected level in a private browsing window, confirm that the form requires an invite code, and then complete checkout with a valid code. After successful checkout, open the Membership Account page as the new user and check whether issued codes are visible. If the code field does not appear, the most common causes are an incorrect level ID or a PHP snippet that is not running.
Separate Rules: One Level Requires a Code, Another Issues Codes
A more controlled setup is to protect one level while allowing only a trusted level to issue codes. This is useful for clubs where not every member should be able to invite people - only moderators, instructors, partners, or ambassadors. In that case, the arrays differ.
<?php
global $pmproio_invite_required_levels;
global $pmproio_invite_given_levels;
// Level 4 cannot be joined without an invite code.
$pmproio_invite_required_levels = array( 4 );
// Level 5 issues codes after initial checkout.
$pmproio_invite_given_levels = array( 5 );
define( 'PMPROIO_CODES', 2 );
define( 'PMPROIO_CODES_USES', 1 );
This model reduces the risk of uncontrolled growth. Even if an ordinary member enjoys the club, they do not automatically receive a code. Codes are created only for the selected level. Testing should include two accounts: one at the level that issues codes and another attempting to join the protected level.
Single-Use, Limited-Use, and Reusable Codes
The number of allowed uses determines the character of the invitation. If PMPROIO_CODES_USES is set to 1, each code is intended for one new member. With a higher number, the code can be used several times. With false, the code becomes unlimited. That can be useful for a controlled group, but it is risky for a private club: one publicly shared code can open access to everyone who sees it.
For most private communities, begin with single-use codes. A reusable code is useful only when its distribution is controlled by the organizer, such as when a private student group receives one code for a limited cohort and the administrator understands the risk in advance. If growth should happen through recommendations, it is safer to create several single-use codes than one unlimited code.
| Model | When to use it | What to test |
|---|---|---|
| One code, one use | Private club, one-person referral, manual quality control. | After one successful join, a second user must not be able to use the same code. |
| Several codes, one use each | Ambassador program, small enrollment, phased launch. | The member sees several separate codes in their account. |
| One code, several uses | A group with a known number of people, a class cohort, or a partner mailing list. | The usage limit is not exceeded and the code is not published on an open page. |
| One unlimited code | Only for tightly controlled needs where code secrecy is not critical. | A rapid plan exists to disable or replace the code if it leaks. |
Why You Should Not Create Too Many Codes During One Checkout
The official page warns that generating a large number of codes, especially more than 25, can noticeably slow down or even interrupt checkout. The practical reason is simple: after successful checkout, the plugin must create and save a set of unique codes. The more operations happen at checkout, the greater the risk of delay on weak hosting, with a slow database, or during simultaneous registrations.
If one organizer needs many invitations, consider a different model. It is often better to create one code with a limited number of uses than 50 individual codes. Better still, test the load on a site copy and complete test checkouts several times in succession. Do not move a large code allocation to a live paid level without testing it first.
The Invite Code Flow: From Checkout to the Account Page
The most important practical sequence is this: a level requires a code, the visitor enters it at Membership Checkout, PMPro completes membership checkout, the member reaches Membership Confirmation, and then sees their codes in Membership Account if their level issues invitations. If any part of this sequence is not configured, the user journey can break in ways that are not always obvious.
Membership Checkout Page
The PMPro checkout page is rendered through a block or shortcode. The documentation states that checkout can be opened directly for a specific level using a level parameter in the URL. For Invite Only Membership, this is useful for testing: you can go straight to the intended level and verify that the invite-code field appears exactly where expected.
If the site uses a custom levels page, its buttons and links must lead to the correct level. A common issue looks like this: the administrator protects level 4, but a button on the page leads to level 3. The visitor does not see a code field, and it appears that the plugin is not working. In reality, they are simply checking out for a different level.
How to Check a Level URL
Open the PMPro Levels screen and identify the ID of the intended level. Then inspect the checkout link. PMPro materials may show direct links that use a level parameter. The important thing is not to memorize an example from another site, but to confirm which path your assigned Checkout page uses and which parameter your current configuration processes.
If you use buttons in the block editor or a page builder, do not duplicate them by sight. Open the button settings, inspect the URL, and compare the level ID. For invitation-only registration, this is critical: the entire invitation gate is tied to the selected level, not to the button label.
Membership Confirmation Page
After successful checkout, the user should see a confirmation page. Screenshots on the official add-on page show an example message with invitation codes on the confirmation page. This is useful at the first point of contact because the member immediately understands that they have the ability to invite others.
In practice, do not rely solely on the confirmation page. A user may close the tab, an email may go to spam, and the code may be needed later. That is why the next check is Membership Account, where the member should see used and unused invite codes if their configuration issued them.
Membership Account Page
Membership Account is the member's working area after joining. In the context of Invite Only Membership, this page matters for two reasons: members can view their codes there, and administrators can explain invitation rules without a separate exchange. If the page is not assigned or is hidden in navigation, members will contact support asking where to find an invite code.
Add a Membership Account link to the menu for logged-in users or to the welcome email if that fits your site structure. There is no need to display codes on a public page. It is enough for an existing member to be able to quickly find their account after signing in.
Administrator User Editing
The official add-on page specifically mentions administrative code management through the WordPress user-editing screen. This is useful for support: if someone loses a code, needs one manually after renewal, or an organizer needs several additional invitations, the administrator can work with that individual user.
Do not turn administrative code additions into a mass operation without rules. Create an internal procedure: who may request additional codes, how many codes are issued, how the reason is recorded, and when a request is declined. This reduces conflict when some members receive extra invitations and others do not.
Practical Example: A Private Club with Two Access Levels
Consider a concrete setup. An expert club has a "Member" level that grants access to private materials and discussions. An "Ambassador" level is available to a small group of trusted members who may invite new people. A regular visitor must not be able to join "Member" without a code, while codes should be created only for "Ambassador."
Goal
Create controlled registration: a new member joins the primary level only with an invite code, while only a separate level has the right to issue codes. Whether the levels are paid or free does not change the invitation flow itself. If a level is paid, payment remains in the PMPro form, and the invite code only permits the user to begin checkout.
Preparation
Before configuration, you need three things: working PMPro pages, two existing levels with known IDs, and a test user or test account that can complete checkout without affecting real data.
Assume that "Member" has ID 4 and "Ambassador" has ID 5. These numbers will be different in your project. Do not use example values without verifying them.
Configuration Steps
- Create or verify the "Member" level under
Memberships > Settings > Levels. - Create or verify the "Ambassador" level and make sure it is available only to the intended group.
- Add a configuration snippet where
$pmproio_invite_required_levelscontains the "Member" level ID and$pmproio_invite_given_levelscontains the "Ambassador" level ID. - Set
PMPROIO_CODESto2if every ambassador should receive two invitations. - Set
PMPROIO_CODES_USESto1if every invitation must be single-use. - Enroll a test account in the "Ambassador" level and confirm that codes appear on the account page.
- Copy one code and try to join the "Member" level as a new user in a private browsing window.
- Repeat the attempt with the same code for a second new user to verify that the single-use limit is actually enforced.
Expected Outcome
A new visitor without a code must not be able to complete checkout for the "Member" level. A user with a valid code completes the standard PMPro checkout and receives access after completion. The ambassador sees their codes in Membership Account. After a single-use code has been used, another attempt with that same code should be rejected.
A Common Point of Confusion
A code is created after initial checkout, not after every renewal. This is an officially documented limitation. If an ambassador renews membership and expects a new set of codes, they may not receive one automatically. In that situation, an administrator adds codes manually or changes the issuance model in advance.
Verify the full outcome: success is not merely the appearance of the invite-code field. Test the complete flow: rejection without a code, successful checkout with a code, membership assigned to the new user, codes displayed for the member, and the inability to reuse a single-use code.
Managing Community Growth Through Code Settings
The plugin's main practical strength is not the invite-code field itself, but the ability to set a growth pace. With ordinary open registration, a site can grow as quickly as people find its page. In an invitation-only model, growth is determined by issuance rules: who gets codes, how many codes are created, and how many people can join using one code.
If the project is new, start with a small number of codes. One or two single-use codes for each trusted member provide useful information: who invites people, how quickly new users complete checkout, whether questions arise during checkout, and whether support capacity is sufficient. Once the workflow is stable, issuance can expand.
One Member, One Invitation
This is the clearest model for a private club. Every new member receives one code and can bring in one person. Growth is slow but more deliberate. The model works well with hands-on community management: if the quality of new registrations declines, the administrator can see where rules need adjustment.
The practical check is simple: after a new member completes checkout, one invite code appears in their account. After the code is shared with a new person, the original member's code is marked as used. If it remains available for another registration, check the value of PMPROIO_CODES_USES.
Ambassadors Invite a Group
In this model, codes are issued not to everyone but to a separate level. It fits projects with instructors, team leaders, coordinators, event organizers, or partners. The plugin does not turn this into full group management, but it provides a clear entry path: a trusted member receives several codes, and new users purchase ordinary individual membership through PMPro.
If one parent account needs to manage child accounts, pay for shared access, and see group members, that is a different requirement. The official Invite Only Membership page specifically suggests considering Group Accounts for connecting multiple accounts under one membership. Do not expect invite codes to provide group-membership features.
One Code for a Limited Cohort
A single code with several uses may work for a class cohort, private event, or partner email campaign. It is simpler to communicate because the organizer sends one invite code to the entire group. The risk is higher, however, because the code can be forwarded. This model therefore needs a use limit and a clear campaign window, even if the plugin itself does not provide a separate expiration setting.
If temporary access is required, plan a manual process for disabling or replacing the code in advance. For example, after a cohort is filled, the administrator stops using the old code and issues a new set only for the next group. Do not promise members that a code will work indefinitely if enrollment rules are expected to change.
Connecting Invitations with Protected Content, Pages, and Emails
Invite Only Membership should not exist separately from the rest of the membership architecture. An invite code opens the door to a level, but the level has value only after the user can access the right materials, sees a clear account area, and understands what to do next. After configuring invite codes, review related PMPro components: content restrictions, pages, emails, and navigation for signed-in members.
The most common mistake is assuming that invitation-only registration automatically protects the entire site. In reality, the plugin controls checkout for selected levels. Standard Paid Memberships Pro behavior applies afterward: each page or post must be protected by the proper level, the restricted-access message must direct users to the correct checkout, and after joining successfully, a member must reach the place where membership value is visible.
Using Require Membership on Pages and Posts
In PMPro, content access is generally tied to membership levels. Pages and posts use the Require Membership block or panel to select the levels allowed to access the content. Invite Only Membership does not replace this setting. If a course page is available to everyone, it remains available to everyone even when joining a level is restricted by invitation.
The practical order is: configure the level, protect the necessary pages with that level, then enable the invite-code requirement for the level itself. Afterward, test two situations. A guest without membership should see a clear message that they need to join. A new user with a code should complete checkout and gain access to the page. If access does not appear after checkout, the issue is usually not the invite code, but content assigned to another level or a message that links to the wrong page.
When to Show a Preview of Protected Content
For SEO and usability, it can sometimes help to show a short preview of protected material. PMPro includes functionality related to displaying excerpts of protected content in archives and search. For an invitation-only project, whether this is appropriate depends on the goal. If a private club wants to remain largely invisible, a preview may be unnecessary. If the project attracts suitable members through recommendations and expert content, a short public excerpt can help explain the level's value before someone enters a code.
Do not make the preview too detailed. It should explain the material's topic and the joining path without exposing the protected value. A good formula is a short introduction, a note about the required access level, and a link to checkout rather than a long retelling of a private lesson. After enabling previews, open the page as a guest and as a member to confirm that the first version does not reveal too much and the second shows the full content.
The Membership Levels Page as an Expectation Filter
The Membership Levels page is often the first place where visitors understand whether they can join. If some levels are restricted by invite code, do not present them as standard purchases. Clearly explain that the level is available by invitation, while open levels can be joined without a code. That way, visitors do not interpret a checkout error as a broken site.
Keep the text on the levels page brief. There is no need to publish internal code-issuance rules for a private club. A sentence such as "This level is available by invitation from an existing member" plus a help link is enough. The important part is that the protected level button leads to the correct checkout. If multiple levels have similar names, add an internal link check before launching a campaign.
Welcome and Transactional Emails
PMPro lets you edit email templates in the admin area. Emails matter especially for invitation-only sites because a user may forget where to view their codes. Do not attempt to insert a dynamic invitation list into an email without confirming an appropriate variable. A safer option is to add a Membership Account link to the welcome email and briefly explain that invitations are available there when the member's level provides them.
If you change an email, send a test message and also review a live email from an actual test checkout. PMPro documentation specifically warns that a test email template may not populate every value in the same way as a real operation. The final check should therefore include a real test checkout, not only the send-test button.
Navigation for Signed-In Members
After joining, a member should quickly find their account, protected content, and invitation rules. You can use a logged-in-user menu, the Membership Account page, PMPro blocks, and standard help pages. There is no need to build a separate complex navigation system solely for invite codes. The goal is simply to remove the gap between "I joined" and "Where are my invitations?"
Check the path on a small screen even if your site's subject matter is not especially mobile-focused. An account link is often hidden in a dropdown menu, while a user remains on the confirmation page after payment and does not know where to go. Add a short next-step prompt on Membership Confirmation: open your account, view invitations, and read the community rules. This is not a technical add-on setting, but it can dramatically reduce questions.
Operational Support: Who Issues Codes and How to Maintain Control
Technically, Invite Only Membership can be enabled in minutes. Operationally, invitation-only registration needs rules. Without them, administrators quickly begin issuing codes manually, members forward old invitations, support staff do not know when to decline a request, and site owners lose sight of why the audience is growing in a particular way. A strong invitation-only model always combines plugin settings with a simple internal policy.
The policy does not need to be bureaucratic. One team page is enough: which levels are protected, who receives codes, how many codes are issued, when codes may be added manually, how to handle a lost code, what to do when someone reports an invalid invitation, and when to revise the overall model. This is particularly important when access affects payments, private materials, or discussion quality.
Rules for Manually Issuing Additional Codes
The official add-on page states that an administrator can add invite codes to a specific user through the WordPress user-editing screen. This is useful, but it should be governed by rules. If any member can ask for "a couple more codes" without explanation, a private club gradually loses its purpose.
Separate the reasons for manual issuance. The first is technical: a code was not created because of a configuration issue, but the member should have received it. The second is organizational: the member has been assigned the role of ambassador, instructor, or moderator. The third is an exception approved by the community owner. For each reason, define a limit and a brief note in support notes or the team's internal log.
Minimal Support Log
You do not need a complex CRM for a small project. However, it is useful to record the request date, user, number of added codes, reason, and administrator name. This helps in disputed situations, such as when a code becomes public or a member claims they were promised additional invitations. The log can be a simple document or a field in an internal support system.
From a security perspective, avoid storing unnecessary personal data. Record only what helps the team reconstruct its decision. If the project is subject to strict data requirements, align the log format with the site's policy.
How to Explain a Code Request Denial
Closed registration can sometimes create an awkward conversation: someone wants to invite another person, but community rules do not allow it. It is better to have a ready, neutral explanation. It should refer to level rules rather than an administrator's personal decision. For example: "This level automatically receives one single-use code. Additional invitations are currently issued only to members of the Ambassador level."
This wording does not expose internal mechanics or invite a dispute over technical details. If the user should receive a code, support checks their level, status, issuance history, and adds one manually when appropriate. If not, the refusal remains understandable and consistent.
What to Do If a Reusable Code Leaks
If you use a code with multiple uses or no limit, prepare a leak-response plan in advance. The symptom is simple: registrations appear that do not match the invitation channel, or a code starts being used faster than expected. Do not wait for the issue to become widespread. Stop the campaign, stop distributing the old code, review users who have already joined, and prepare a new code or another enrollment model.
The plugin is not an anti-fraud system. It validates an invite code within PMPro's membership behavior. Organizational control remains with the site owner: who receives a code, where it is published, how many uses are acceptable, and who handles support. The wider the distribution of one code, the more external rules are required.
Metrics Worth Reviewing After Launch
Closed entry does not mean analytics can be ignored. Track how many people reach checkout, how many are rejected because of a code, how many complete checkout, how many contact support, and how many invite codes remain unused. This information helps determine whether the invitation model is too restrictive.
If codes are rarely used, members may not understand where to find them or may not see value in inviting others. If codes are used too quickly, the growth model may be too open. If there are many checkout rejections, the text on the levels page, emails, and help rules may not be clear enough. The technical configuration may be correct, but user communication still needs improvement.
Compatibility with Checkout, WooCommerce, Caching, and Themes
Invite Only Membership sits at a sensitive point on the site: the membership checkout form. Compatibility should therefore be assessed through specific areas rather than general claims: which checkout is used, whether the form is cached, whether the theme changes the HTML structure of PMPro pages, and whether another plugin replaces the standard checkout flow.
Why WooCommerce Checkout Does Not Work with This Add-On
The official add-on page explicitly states that Invite Only Membership is not compatible with WooCommerce checkout and that members must complete checkout through Paid Memberships Pro. This is not a minor caveat but a key limitation. If a site sells membership through WooCommerce as a product and expects the invite-code field on the WooCommerce cart or checkout page, that use case does not match the add-on's documented behavior.
The practical conclusion is to use PMPro's standard Membership Checkout page. If you already have a complex WooCommerce funnel, resolve the architectural question first. You may need to implement invitations differently or move membership checkout back to PMPro. Do not try to bolt an invite code onto WooCommerce checkout without a confirmed extension and thorough testing.
Caching Checkout and Account Pages
Membership-site pages often contain dynamic data: the current user, level, form, errors, payment status, and invitation codes. If a cache serves the same page version to different visitors, troubleshooting becomes frustrating. One user sees the code field, another does not, and a third receives an outdated message.
For Invite Only Membership, it is especially important to exclude Membership Checkout, Membership Confirmation, Membership Account, login, and any page that displays personal member data from full-page caching. PMPro documentation includes caching guidance and core release notes mentioning PMPro cache and cookie changes. The exact configuration depends on your caching plugin or host, but the principle is the same: personalized pages and checkout pages must remain dynamic.
Theme, Block Editor, and Page Templates
PMPro lets you customize page appearance through the editor, additional CSS, filters, and, when needed, templates. For Invite Only Membership, it is usually enough to style the form and messages carefully rather than rewriting templates. If a theme changes form styling too aggressively, the invite-code field may be hard to notice or may fall outside the page layout.
Start with safe CSS instead of copying templates. PMPro documentation publishes a list of page classes and recommends keeping CSS in a child theme, additional-styles editor, or dedicated settings plugin. Leave template overrides to a developer because an outdated template can conflict with future PMPro changes.
Safe Improvements: Clear Forms and Thoughtful Messages
Invite Only Membership does not require complex code for a standard launch. However, it is often helpful to make the process clearer for users: where to get an invite code, what to do when there is an error, and why a code did not work. The key is not to interfere with critical code-validation behavior, but to improve visibility and support around the form.
CSS for a More Noticeable Invitation Area
If the invite-code field is too easy to miss, you can add light styling to PMPro pages. The following CSS example is based on general PMPro classes from appearance-customization documentation. It does not change code validation or interfere with payment checkout. Add this style through Appearance > Customize > Additional CSS, Appearance > Editor for a block theme, or a separate file in a settings plugin.
.pmpro_form .pmpro_form_field {
margin-bottom: 1rem;
}
.pmpro_form .pmpro_message.pmpro_error,
.pmpro_form .pmpro_message.pmpro_alert {
border-left: 4px solid #b54708;
padding-left: 1rem;
}
.pmpro_form .pmpro_form_input:focus {
outline: 2px solid #2271b1;
outline-offset: 2px;
}
This snippet improves the readability of PMPro fields and messages in a general way. It does not rely on undocumented Invite Only Membership classes, so it is safer than highly specific selectors that may change. After adding it, open Membership Checkout, try an invalid code, and confirm that the message is noticeable without breaking the form at mobile widths.
Explaining Rules to Members Without Changing Plugin Behavior
Some problems can be solved with on-site text. Create a short private page or a block in Membership Account that explains the rules: how many invitations a member receives, whether a code may be passed on, what to do if a code is lost, and where to write if there is an error. There is no need to expose technical details, but reducing repetitive support requests is important.
If you edit PMPro welcome emails, add a neutral reminder: "Your invitations are available in your account." PMPro documentation confirms that email templates can be configured through Memberships > Settings > Email Templates. Do not insert codes manually into emails unless you have verified that the necessary variables are available in your exact template. It is better to link to Membership Account, where the user sees the current state.
A Filter for a Special Code-Validation Rule
The official add-on page documents the pmproio_check_user filter, which can change how a user's invite code is validated when that user has no active membership. Use this only when you have a developer and a clear business requirement. For example, some projects may need not to disable an invitation immediately when the inviting user's status is temporarily affected, but that change alters the trust rules.
This guide does not provide a ready-made filter snippet because a safe implementation depends on membership statuses, cancellation rules, business rules, and support procedures. An error in this customization can open access more broadly than intended. If you need a nonstandard approach, describe the rule in plain language, test it on a site copy, and use the documented filter as the extension point rather than editing add-on files.
Launch Plan for a Protected Level Without Losing Leads
Even after the technical setup is ready, do not immediately enable invitation-only access for the main live level and send an email campaign. Closed registration affects expectations: some visitors will see a code field, some will be rejected, some will try an old code, and others will contact support. It is better to launch in several short stages.
This plan is especially useful for sites that already have existing members. If rules change abruptly, old links in emails, navigation, and promotional materials can lead visitors to a dead end. Invite Only Membership should add control, not create the impression that checkout is broken.
Stage 1: Test Level and Internal Team
First create a separate test level or use a non-public level with minimal impact. Protect it with an invite code, issue codes to one test user, and complete the flow using several roles. The administrator checks settings, the member checks the account, and the new user checks checkout. If an error appears at this stage, it is easier to fix without pressure from real registrations.
Do not skip negative testing. Successful checkout with the correct code is only half the test. Try an empty code, an invalid code, an already used single-use code, a code from a user with canceled membership, and a link to another level. Negative tests reveal how clear the messages are and how easily support can explain a rejection.
Stage 2: Limited Code Issuance to Trusted Members
After the test level, connect the live level but do not issue codes to everyone at once. Choose a small group of trusted members who understand the community rules. Give them one or two codes each and ask them to complete the actual process with invited people. At this stage, collect questions: where they found the code, whether the form was clear, whether emails arrived, and whether the account page opened.
If there are many questions, do not increase issuance. First improve the text on the levels page, add a Membership Account link, clarify the email, and check caching. The plugin may be working technically, but the launch will still be weak if people do not understand why the site asks for a code or where to obtain one.
Stage 3: Live Operation and Regular Checks
When the limited launch is stable, the invitation-only model can move into normal operation. Document issuance rules in help materials, train support, update navigation, and check every public link to the protected level. If the site uses campaigns, emails, or partner pages, review them separately: old links often lead to the general levels page rather than the specific protected checkout.
Every few weeks, repeat a quick check. Create a test code, complete checkout, confirm that the code appears for the intended level, and test reuse. This takes little time but helps catch problems after updates to the theme, PMPro, caching plugin, or a custom snippet.
When to Roll Back the Configuration
A rollback is not needed only when there is a technical failure. Sometimes the invitation-only model is too restrictive for the site's current goal. Warning signs include a sharp drop in leads, repeated support questions, existing members not using codes, important partners forwarding one code without control, or a paid checkout losing people at the invitation step.
A safe rollback means removing the level from $pmproio_invite_required_levels or temporarily disabling the configuration snippet if it is responsible only for the invitation-only model. After the rollback, clear the cache, check checkout, and update the text on the levels page. Do not delete working PMPro levels or pages merely to stop invitations. The goal of a rollback is to restore the open checkout path while preserving member data.
Verifying the Configuration
Invite Only Membership testing should be flow-based. It is not enough to open a form and see a field. Test rejection, successful checkout, usage limits, the account page, behavior after cancellation, and support for manually issuing codes. A solid verification process resembles a small acceptance test.
New User Test Path
- Open the protected level while not signed in.
- Try to proceed to checkout without an invite code.
- Confirm that the user cannot complete checkout for the protected level.
- Enter a deliberately invalid code and check that the message is clear.
- Enter a valid code and complete checkout.
- Confirm that membership is assigned to the correct user and correct level.
- Open protected content and make sure access is now available.
- Open Membership Account and check the user's code list if their level should issue invitations.
Testing Limits
If a code is single-use, try to use it again with another test user. If a code is intended for several uses, complete checkout up to the limit and confirm that the next user is rejected. If a code is unlimited, verify that it can be reused and separately consider whether you have a plan to revoke it if it leaks.
Do not perform these tests with live payment data when a gateway test mode or free test level is available. For paid levels, testing must account for the standard PMPro flow: an invitation does not replace payment, and a failed payment must not create active membership.
Testing Cancellation and Rejoining
The official limitations are important for support. If the inviting member's membership expires or is canceled, their invite codes become invalid. Users who already joined through those codes remain active members. If an invited user cancels membership and later wants to return, the same code cannot be reused; they need a new invite code.
Test these situations with test accounts when they matter to your model. This is especially relevant for clubs with annual memberships, where people often assume that an old invitation is "still somewhere" and can be used again. It is better to explain the rule on a help page in advance than to explain it in every support request.
Troubleshooting Common Invite Code Problems
Most Invite Only Membership problems look similar: a code field does not appear, a code is not accepted, a user does not receive invitations, or checkout behaves differently from what was expected. Start not with assumptions, but with the point in the flow where the process breaks.
No Invite Code Field on the Checkout Page
Symptom: the user opens Membership Checkout for a protected level, but the form looks like a standard PMPro form. There is no code field and no invitation message.
Possible cause: the level is not included in $pmproio_invite_required_levels, the wrong ID is specified, the configuration snippet is not running, or the link leads to another level. Page caching can also cause this issue.
What to check: the level ID under Memberships > Settings > Levels, whether the PHP snippet is active, the direct checkout link for the intended level, cache clearing, and whether WooCommerce checkout is involved in this flow.
How to fix it: correct the protected-level array, save the snippet, clear the cache, open the form in a private browsing window, and test again. If disabling the snippet returns the form to its standard state, the behavior is coming from the Invite Only Membership settings.
A Valid Code Is Not Accepted
Symptom: the user enters a received code, but checkout does not proceed. The code appears correct and has no obvious typo.
Possible cause: the code has already been used, it belongs to a user whose membership expired or was canceled, the use limit was exceeded, the user is trying to apply an old code after canceling their own membership, or the form is open for the wrong level.
What to check: the inviting member's status, the used and unused code list in Membership Account or on the user's admin screen, the correct checkout level, the PMPROIO_CODES_USES limit, and accidental spaces when copying the code.
How to fix it: issue a new code manually if that fits community rules, or explain why the old code is no longer valid. Do not increase the limit for every code merely to resolve one request if the community model requires single-use invitations.
A Member Did Not Receive Codes After Checkout
Symptom: a new member completed checkout successfully but does not see invite codes on the Membership Account page and did not receive them on confirmation.
Possible cause: the member's level is not included in $pmproio_invite_given_levels, PMPROIO_CODES is set to 0, the checkout was not initial checkout, or the user only renewed an existing membership. The official documentation states that codes are created after the initial checkout, not on renewals or level changes.
What to check: the level ID that should issue codes, the type of user operation, the PMPROIO_CODES value, display of the Membership Account page, and membership status.
How to fix it: add the level to the issuance array, test an initial checkout, and if necessary add codes to the specific user manually through the user-editing screen.
Checkout Becomes Slow or Occasionally Fails
Symptom: after invitations are enabled, checkout takes a long time to process, and the user sometimes sees an error or does not reach confirmation.
Possible cause: too many codes are generated during one checkout. The official page warns that a large number, especially more than 25, can slow checkout or cause it to fail. Other factors include weak hosting, a slow database, heavy email plugins, and caching of a dynamic page.
What to check: the PMPROIO_CODES value, checkout load, hosting error logs, caching conflicts, and plugins that run during registration.
How to fix it: reduce the number of generated codes, use fewer individual codes with a limited number of uses, test checkout on a site copy, and contact your host or developer if the business genuinely requires many invitations.
A Code Is Needed at WooCommerce Checkout but Does Not Appear
Symptom: the site sells membership through WooCommerce, and the owner expects an invite code to appear in the WooCommerce cart or checkout.
Possible cause: this is not a supported flow for the add-on. Documentation explicitly states that members must complete checkout through Paid Memberships Pro rather than WooCommerce checkout.
What to check: where level checkout actually happens, whether the PMPro Membership Checkout page is used, and whether it has been replaced with a WooCommerce product or third-party funnel.
How to fix it: return protected-level checkout to the standard PMPro flow or choose another architecture for WooCommerce. Do not try to bypass the limitation by editing plugin files.
Members Do Not Know Where to Find Their Invitations
Symptom: codes have been created, but people contact support because they do not know where to view or share them.
Possible cause: the Membership Account page is not obvious, no menu link has been added, the email does not explain the next step, and invitation rules are not described in a private knowledge base.
What to check: whether Membership Account is accessible to a signed-in member, whether there is a menu link, the welcome email text, and a short instruction inside the private area.
How to fix it: add a clear account link, update the help text, and test the flow through the eyes of a regular member. Do not display codes on a public page or send them manually without a reason.
Invite Only Membership Video Demonstration
The official add-on page includes a focused video about Invite Only Membership. It is useful as a visual complement to the sections on the working flow and verification: you can see how the invitation-code concept connects with membership checkout and the user account. Use the video as a reference, but always confirm final settings against current documentation and your own set of levels.
Questions to Resolve Before Launching Invitation-Only Registration
Can I protect only one level with invitations while leaving the others open?
Yes. The configuration specifies the IDs of levels that require an invite code. Other levels can remain standard if they are not included in $pmproio_invite_required_levels. After making a change, check every public level button because an incorrect link can send users to the wrong place.
Are codes created with every membership renewal?
No. The official add-on page states that invite codes are created after initial checkout. Renewals and level changes do not create new codes automatically. If a member needs additional invitations after renewal, an administrator can add them manually through the user screen.
What happens to invitations if the inviting member's membership is canceled?
If the inviting member's membership expires or is canceled, their codes become invalid. Users who already joined through those codes remain active members. This is an important support rule: do not promise that old invitations will remain valid indefinitely.
Can I use the plugin with WooCommerce checkout?
This add-on has an official limitation: it is not compatible with WooCommerce checkout, and members must purchase membership through Paid Memberships Pro. If the site is built around WooCommerce checkout, resolve the registration architecture first instead of expecting the invite-code field to appear in the cart.
Do I need a separate page with invitation rules?
For a private community, it is useful. The plugin displays codes but does not explain your policy: who may receive an invitation, how many codes are issued, what to do with a lost code, or whether additional codes can be requested. A short help page reduces support workload.
How can I tell whether codes are slowing down checkout?
Complete several test checkouts in a row and compare processing time before and after enabling code issuance. If many codes are created per checkout, reduce PMPROIO_CODES or use a code with several allowed uses. Official documentation warns that a large number of generated codes can slow down or break checkout.
Can I change the text of restricted-access messages?
PMPro has separate documentation and filters for general protected-content messages, but checkout messages and invite-code behavior require care. Do not modify add-on code directly. Start with clear help on the account page and careful CSS, and make programmatic changes only through documented hooks or with a developer.
When Paid Memberships Pro Invite Only Membership Is the Right Choice
Paid Memberships Pro Invite Only Membership is worth using when a site already runs on PMPro and you need to restrict entry to selected levels with an invitation code. It is particularly well suited to private clubs, small professional communities, educational cohorts, ambassador programs, and early launches where the pace of growth matters more than the maximum number of registrations.
Before launch, check core PMPro pages, level IDs, the Membership Checkout path, Membership Account, code-issuance rules, usage limits, and caching for dynamic pages. Start with a test level, then move the settings to a live level. If you need group payments, parent and child accounts, or seat management, look toward Group Accounts. If you specifically need invitation-only entry to a PMPro level, this add-on addresses the need more directly and simply.
Once the model is selected and the test flow works without errors, you can download Paid Memberships Pro Invite Only Membership, install it on a prepared site, and roll out closed registration gradually. The most reliable launch is one where the first invite code has been tested by a new visitor, an existing member, and a support administrator.


