WordPress Membership Plugins: PMPro, Simple Membership, and Ultimate Member
For paid content with membership levels and access periods, start by comparing Paid Memberships Pro (PMPro) and Simple Membership. For a community built around registration, profiles, and member directories, consider Ultimate Member first. A signup form and a system that changes access after payment or cancellation solve different problems.
User roles and membership levels serve different purposes
A WordPress user role controls work on the site, such as writing posts, editing other people's content, or changing settings. A membership level defines access to your service: which resources a member can use and for how long. Granting Editor or Administrator privileges to someone who only needs paid articles creates unnecessary permissions. Keep ordinary members' site privileges limited and configure content access separately.
Describe the service before selecting a plugin. A free reader club, a monthly paid column, and a club with public member profiles need different features. If you only need enquiries or email subscriptions, a contact form or newsletter tool may be sufficient without creating member accounts.
Compare the three candidates
| Plugin | Primary reason to consider it | Cost boundary to check |
|---|---|---|
| Paid Memberships Pro | Membership levels, recurring payments, and content restrictions | Free core versus paid extensions, support, and payment-related charges |
| Simple Membership | A focused protected resource area with defined access periods | Free foundation versus required add-ons and payment-provider fees |
| Ultimate Member | Front-end registration, login, profiles, and directories | Free community features versus paid extensions such as Stripe |
A listed payment integration does not establish availability for your country, currency, business type, or payout requirements. Compare processing fees, any additional integration charges, renewal prices, and support coverage as well as the plugin licence. A free plugin does not make the entire membership business free to operate.
Paid Memberships Pro: build around access levels
Use the developer's PMPro download instructions and account-based distribution. Do not assume that searching the WordPress.org directory is always the current installation route. Include the update mechanism and the applicable licence and support terms in your adoption plan.
After activation, the setup wizard can prepare membership pages, initial levels, and payment defaults. Completing the wizard does not automatically protect your existing articles. Choose one public article and one member article and configure their restrictions explicitly.
- Open Memberships → Settings → Levels and create a level that matches your offer: free, one-time, monthly, or annual, for example.
- Check the initial charge, recurring amount and interval, and access expiry separately. A limit on billing cycles is not necessarily a limit on access.
- Configure content at the level and individual post or page. If protecting a whole category, check whether articles intended to remain public are included.
- Check the membership pages and payment settings, then use the provider's test environment to follow registration through access activation. Webhooks—the provider's notifications to your site—must reach the site successfully.
The level settings documentation explains that billing can stop after the configured number of cycles while membership access continues unless expiry is also configured. It also states that changing a level's price affects new checkouts, rather than automatically repricing existing recurring subscriptions. Plan those transitions explicitly.
Simple Membership: pay attention to access duration
Simple Membership provides levels, restricted posts and pages, and one-time or recurring payments through supported integrations. Start at WP Membership → Membership Levels → Add New, define the access duration, and then connect your registration and login pages and protected content. The developer's membership-level guide explains the available duration settings.
Decide what cancellation should do before selling a subscription. The cancellation documentation distinguishes three cases: No Expiry deactivates the account when the subscription is cancelled; Fixed Date Expiry retains access until the specified date; Expire After retains it for the configured period from the last payment. Do not assume that every configuration preserves unused paid time.
For an offer described as “30 days of access after payment, even if the next renewal is cancelled,” align the access duration and billing cycle and test both immediately after cancellation and after expiry. Explain the conditions with dates on the signup page and decide how delayed payment notifications will be handled.
A refund is also different from cancelling a subscription. The refund guide explains that the default refund handling deactivates the member account but does not cancel the recurring payment agreement itself. Check the provider for future charges. If you change the related refund settings, test the resulting access behaviour again.
Ultimate Member: build around profiles and community
The free Ultimate Member core includes front-end registration, login, profiles, roles, directories, and content restriction. Selling recurring Stripe memberships belongs to a paid extension. A free registration form therefore does not establish that recurring billing is included.
Following the getting-started guide, use Ultimate Member → Forms for registration and profile fields, User Roles for member roles, and Member Directories for directory settings. Check that login, account, and password-reset pages are assigned correctly. When placing a form or directory elsewhere, use the block or shortcode generated by your own installation.
Separate information needed for registration from information that should appear publicly. Decide whether visitors can browse the directory, which fields appear in results, and whether members can change their privacy settings. An email address does not need to become public merely because it is required for registration. Never configure registration so that an ordinary applicant can select an administrator role.
If restricting the whole site, keep login, registration, and password recovery accessible. When combining site-wide, individual-content, and block rules, check the content-restriction documentation to understand the applied rules. Hiding a menu link does not prevent access to its destination URL.
Protect files and cached pages separately
A PDF uploaded to a public uploads URL can remain accessible even when the article linking to it is restricted. If paid downloads are central to the offer, use a download system or server protection that checks authorization for the file request itself. Concealing a link and protecting the requested file are different controls.
Check search excerpts, feeds, related-post widgets, and directly entered article URLs. Use two separate test-member sessions and a logged-out window. Testing only as an administrator can hide mistakes because the administrator is allowed to see more than an ordinary member.
Do not let a shared page cache serve member-only content or one member's personal details to others. Ultimate Member documents automatic exclusions for its standard pages with popular cache plugins, while pages to which you add its features require manual exclusions. Check login, account, checkout, and personal-resource pages across WordPress, hosting, and any content delivery network (CDN). Purge old caches after changes and repeat the checks. Our WordPress cache plugin comparison explains the relevant cache layers.
Verify the full lifecycle before opening registration
Start with one level and one protected article. The following table is a set of operating requirements to define and test, not a promise that every plugin automatically behaves this way.
| Test state | Expected result to define and verify |
|---|---|
| Visitor or registration awaiting confirmation | Public explanation and signup remain available; protected content and files do not |
| Active member | Access matches the member's level, without exposing another account's information |
| Renewal cancelled, paid time remaining | Future billing stops and the access end date matches the advertised terms |
| Expired, refunded, or failed payment | Access follows the defined policy and renewal or support remains possible |
| Lost password or account closure | Password recovery works; account deletion and the payment agreement are checked separately |
In payment test mode, compare the confirmation screen with the site's transaction record, the provider's record, and the member's actual access. Check necessary member and administrator emails too. If payment succeeds without activating access, investigate notifications and membership state before asking the customer to pay again and risking a duplicate charge.
Before adoption or migration, prepare database and file backups and a recovery plan. Isolate staging from live emails and billing, and map levels, expiry dates, subscription identifiers, and visibility settings to the replacement system. Disabling or deleting a plugin must not be assumed to stop the provider's recurring charges. Have a way to close new registrations temporarily and recover using the backup and existing payment agreements.




