We’re thrilled to announce the launch of Paid Memberships Pro v3.0, a monumental update that is over three years in development. Designed to transform how you manage and engage with your members, this release zeroes in on what truly matters to you as a membership site owner: a seamless, member-focused experience.

This post details the major new features and what to expect before you update, since 3.0 has database upgrade scripts that forever change the way your site’s membership data is stored.

Read on to learn about these enhancements and how to safely prepare for the update.

Banner Image for What's new in PMPro v3.0: Multiple Memberships Per User, Subs Table, Member Management

Major New Features in PMPro v3.0

Alongside numerous bug fixes and enhancements to ensure a more stable and efficient platform, below is an overview of the key features in PMPro v3.0.

Rethinking Membership Management: CRM-Style Member Dashboard

We’ve moved membership management from the overwhelming core WordPress User Edit screen and given you a focused, CRM-like Member Edit screen.

The Memberships panel of the new Edit Member screen in PMPro v3.0+

We know that members are the heart of your business: as an admin, you are now just one or two clicks away from the information you need, without any distractions. From this screen, you can access comprehensive insights into each member’s journey, from custom user profile details to subscription statuses and order histories.

The Edit Member screen details all information we know about your member, including:

  • User Info: Basic User Profile fields.
  • Memberships: Overview of active memberships and tools to add or change levels, set membership expiration, cancel memberships and subscriptions, and issue refunds. This panel also includes a history of membership activity for this user.
  • Subscriptions: View all active recurring subscriptions, kept in near perfect sync with your gateway records for plan pricing and status. Connect subscriptions to active memberships, view all related orders, and confirm the exact next payment date—down to the minute.
  • Orders: Access a table of all orders across all subscriptions and one-time payments for this member.
  • TOS History: An optional tab that shows a log of all confirmed Terms of Service acceptance for this member.

The screen will show additional panels based on how you have set up user fields, user field groups, and also based on the Add Ons in your site. Developers can hook into this screen to add new member-focused tabs, further streamlining membership management away from the disorganized and overwhelming WordPress user edit screen.

This new admin screen is a game-changer, crafted from the ground up to ensure that every interaction you have with member information is intuitive, efficient, and clutter-free.

New Paths to Get Paid: Multiple Memberships Per User

Formerly a paid Add On, we’ve merged the multiple memberships per user features into the 100% free and open source core plugin.

Edit Membership Levels and Level Groups in PMPro v3.0+

Multiple memberships in core marks a significant leap forward for all PMPro sites. Now, your members can hold various memberships simultaneously, perfect for sites aiming to offer one-time purchases, additional courses, upgraded community access, or multiple verticals of exclusive content.

As a business decision, you might be wondering why we would merge a premium feature into the free core product.

Since its launch in 2017, we’ve always dreamed of a future where MMPU was in the core plugin. But we knew there was massive development work to get there—as well as some difficult trade-offs related to how the feature works. We knew we’d have to overhaul logic not only the core plugin, but also in our library of 80+ feature-enhancing Add Ons.

So we put our heads down and worked through all the edge cases that made MMPU in core impossible way back then.

Today, all of our Add Ons are either patched to be fully compatible with 3.0, or marked as incompatible with some caveats.

Changes to Subscription Management and Order Statuses

v3.0 introduces a new Subscriptions table. This table now tracks payment subscriptions separate from orders and memberships, offering more accurate and detailed subscription management.

The Subscriptions panel of the new Edit Member screen in PMPro v3.0+

We also removed the inaccurate ‘cancelled’ Order Status. With the addition of the Subscriptions Table, we no longer need to rely on the last order’s status to track subscription status and payment details. v3.0 includes an upgrade script that changes all orders with cancelled status to success, which is discussed more later in this post.

With the Subscriptions table and the changes to order statuses, we set the groundwork for better revenue reporting, predictive income charts, better views for payments in the retries or pending cancellation status, and even reports to help you create a win-back campaign for lapsed members.

It may seem like a small addition, but this new table will unlock a world of new features that are scoped for future version of Paid Memberships Pro.

Support for Stripe Billing Limits in Core PMPro

Formerly a paid Add On, Stripe Billing Limits are now natively supported in PMPro. This allows sites using the Stripe payment gateway to set up installment plans or fixed length recurring memberships that never expire after all payments have been made.

Edit Membership Level to set the Billing Limit for an Installment Plan

This feature is perfect for high-ticket memberships where you want to allow members to pay in smaller increments, but enjoy the full benefits of membership from day one.

Built-in Support for Cancel on Next Payment Date

Also a former premium upgrade, we’ve merged the Cancel On Next Payment Date Add On into the core plugin. This feature aims to reduce refunds and customer account support requests by automatically extending the member’s active membership through their next payment date if they cancel mid-term.

For example, if the member made their monthly membership payment on January 1 and decided to cancel mid-month, the system will now automatically set their expiration date to January 31 and cancel the recurring payment at the gateway. 

Without this feature, members would immediately lose access at the same time their subscription was terminated.

Improved Offline Payment Processing

Since our launch in 2011, PMPro included a manual “Check” payment gateway option, where sites could process membership checkouts through their website and handle payments manually.

Change the label for the manual payment gateway in PMPro v3.0+

In v3.0, we now support customizing the frontend label of this manual payment gateway, which reduces the need for custom code to specify just what manual payments mean in this site. For example, sites can now set the gateway label to a term like “Wire Transfer” or “Venmo”.

This gateway label is respected by our Pay by Check Add On, for sites that offer an onsite payment gateway in addition to a manual or offline method.

“View As” Feature For Admin Membership Access

Admins can now toggle between membership access levels to view the site with and without access. This will help admins better preview, test, and troubleshoot content access restrictions.

Screenshot of WordPress admin toolbar viewing with my access
Screenshot of WordPress admin toolbar viewing without access or as a non-member
Screenshot of WordPress admin toolbar viewing with access or as a member

More Flexible Content Protections and Design Tools with the Block Editor

  • Content Visibility for WordPress Blocks: Restrict content by membership level in all core WordPress blocks.
Content Visibility setting on all core WordPress blocks in PMPro v3.0+
  • More Block Settings: Improved support for designing with blocks
  • Single Membership Level Block: Display information about a specific membership level with ease. This will help sites build beautiful membership levels or pricing pages with the features of the WordPress Block Editor.
Screenshot of the WordPress block editor with the single Level block with individual block components to build beautiful pricing pages
  • Overhauled Blocks: All of the PMPro page and content blocks are now overhauled to use more modern WordPress block development standards, so you can customize the spacing, colors, alignment, and more for all PMPro page and feature blocks.

Database Upgrades and Scripts in PMPro v3.0

Database Upgrade Script: Triggered on Plugin Update

The PMPro v3.0 upgrade script runs immediately on plugin update. The script has the following required components:

  • Populates the new subscriptions table: The new table pmpro_subscriptions tracks subscription status for membership levels with a recurring payment. The upgrade script creates entries in this new database table based on your site’s data in the pmpro_memberships_orders table.
  • Switches order status from canceled to success: In PMPro v3.0, we no longer use the order’s status to track whether the subscription is active. This is now handled in the pmpro_subscriptions table. The upgrade script will change all orders with cancelled status to success in the pmpro_membership_orders table.

The upgrade script can be manually re-triggered using this snippet or the SQL queries within it directly in your site’s database.

You can optionally run these additional SQL queries to remove orphaned table columns in the pmpro_membership_orders table or orphaned usermeta (for sites that were using the Stripe Billing Limits Add On).

Asynchronous Subscription Sync Script: Manual Process

The PMPro v3.0 asynchronous subscription sync script must be manually triggered. You’ll see a notification in your site that there is a database update required for Paid Memberships Pro with a link to begin the script.

Once the update is triggered, you’ll be taken to a page that provides real-time feedback on the update’s progress, including a status area where you can monitor the changes as they happen.

  • The system processes updates in batches of 10. This helps minimize the impact on your active site’s operations.
  • We recommend opening the script in a new browser tab and just letting it run.
  • The script will automatically conclude once all necessary subscription data has been updated. You’ll know the update is complete because the database upgrade notice will stop appearing in your site.
  • If you still see the upgrade notice, that means we still detect subscriptions that need to be synchronized. It’s safe to reenter the sync screen and rerun the script at any time.

For our own PMPro membership site with over 15,000 subscriptions, the sync process took around 1 hour to complete.

Notes Before You Update

This is a major update and you should be fully committed to use v3.0 before you click the Update button.

  • This update makes irreversible changes to your site’s database.
  • We do not recommend that you rollback to a previous version after updating.
  • Always test new releases, especially a major release like v3.0, on a staging environment if possible.

You can update Paid Memberships Pro from the plugins page of your WordPress dashboard or get the latest version of PMPro here and version 3.0 specifically here.

PMPro v3.0 Full Changelog

  • FEATURE: Now tracking payment subscriptions using a new subscriptions table.
  • FEATURE: The Multiple Memberships Per User Add On has been merged into the core PMPro plugin.
  • FEATURE: The Stripe Billing Limits Add On has been merged into the core PMPro plugin. All gateways now support billing limits.
  • FEATURE: The Cancel On Next Payment Date Add On has been merged into the core PMPro plugin.
  • FEATURE: Added a new Edit Member page for editing a user’s membership information.
  • FEATURE: Added a “Admin Membership Access” setting to the toolbar to allow admins to choose whether they want to view the website with full membership access, no membership access, or with their current membership levels.
  • FEATURE: Added “content visibility” settings to all core WordPress blocks to allow restricting by membership level.
  • FEATURE: Added the Single Membership Level block to display information about a specific membership level.
  • ENHANCEMENT: Added a script that will run on upgrade to change all cancelled orders to success so that we can remove cancelled status.
  • ENHANCEMENT: Moving the “Require Membership” settings in the block editor to a new block editor panel.
  • ENHANCEMENT: Added a setting for customizing the word “Check” when collecting offline payments.
  • ENHANCEMENT: Now prefixing the level and discount code URL parameters at checkout.
  • ENHANCEMENT: Overhauled UI across administrative screens.
  • ENHANCEMENT: Updated front-end pages and pre-headers.
  • ENHANCEMENT: Now setting collate when creating database tables.
  • ENHANCEMENT: Adding a $name parameter to the pmpro_user_taxonomy_args filter.
  • ENHANCEMENT: Now sending payment descriptions to Stripe when users pay via Stripe Checkout.
  • ENHANCEMENT: Added the pmpro_get_membership_expiration_text() function to replace the various ways we were getting the expiration text for the Members List table and when showing levels on the account page. Includes a pmpro_membership_expiration_text filter that is meant to replace the pmpro_memberslist_expires_column and pmpro_account_membership_expiration_text filters. The old filters are still applied if in place, but will be deprecated eventually.
  • ENHANCEMENT: Now hiding on-PMPro notices on the PMPro dashboard pages.
  • ENHANCEMENT: Added Screen Options for the orders and discount code list tables.
  • ENHANCEMENT: Now showing links and previews when viewing file fields as read only.
  • ENHANCEMENT: Now passing the $item object to the pmpro_manage_memberslist_custom_column so that custom code knows which specific level is being shown for the user.
  • ENHANCEMENT: You can now set block visibility for nested blocks.
  • ENHANCEMENT: Added pmpro_braintree_subscription_create_array filter.
  • ENHANCEMENT: Added subscription transaction ID and next payment date to members list export.
  • ENHANCEMENT: You can now set block visibility for nested blocks.
  • ENHANCEMENT: Added pmpro_braintree_subscription_create_array filter.
  • ENHANCEMENT: Added subscription transaction ID and next payment date to members list export.
  • BUG FIX/ENHANCEMENT: Now storing payment information in individual orders instead of in user meta.
  • BUG FIX/ENHANCENENT: Now showing “Credit Card” instead of “Pay With Credit Card” on the Update Billing page when using the Stripe payment request button.
  • BUG FIX/ENHANCEMENT: Now preventing multiple user field groups with the same name from being created.
  • BUG FIX/ENHANCEMENT: Now only calculating order tax and total when creating a new order.
  • BUG FIX/ENHANCEMENT: Defaulting tax on MemberOrders to a float for consistency and to avoid potential edge cases.
  • BUG FIX/ENHANCEMENT: Updated our “Lost Password”/”Reset Password” flow to track whether a password reset was initiated by Paid Memberships Pro. If not, some functions related to password reset will be disabled to avoid conflicting with other plugins.
  • BUG FIX/ENHANCEMENT: Now using pmpro_cancelMembershipLevel() when processing an expiration.
  • BUG FIX/ENHANCEMENT: Now caching the recent members and orders dashboard reports.
  • BUG FIX/ENHANCEMENT: Fixed caching of sales reports that were 0 values.
  • BUG FIX/ENHANCEMENT: Allowing dynamic properties in gateway and field classes to avoid PHP 8.2+ warnings.
  • BUG FIX/ENHANCEMENT: No longer attempting to load our blocks if the register_block_type function is unavailable. (ClassicPress compatibility.)
  • BUG FIX/ENHANCEMENT: Adjusted the dashboard UI to hide some elements when the current user doesn’t have the proper caps to use them.
  • BUG FIX/ENHANCEMENT: No longer making the AJAX call to check for notifications if notifications are turned off.
  • BUG FIX/ENHANCEMENT: Adding nonce to email order modal and prefixing params.
  • BUG FIX/ENHANCEMENT: Adding nonce to checkout form.
  • BUG FIX/ENHANCEMENT: Small fixes for theme compatibility in Kadence, BuddyBoss.
  • BUG FIX: Fixed an issue in the WordPress dashboard where the site locale would be loaded instead of the user locale.
  • BUG FIX: Fixed an issue where admin_only user fields would still show on the frontend profile if the current user was an administrator.
  • BUG FIX: Fixed an issue where the annual membership report would not show cancellations.
  • BUG FIX: Fixed an incorrect class name in the profile edit fields.
  • BUG FIX: Fixed issue where invalid dates were breaking SQL queries in the members export and sales reports.
  • BUG FIX: Fixed issue where clicking outside of a modal popup was not closing the popup.
  • BUG FIX: Fixed an issue where reCAPTCHA v3 wouldn’t show the badge for offsite gateways.
  • BUG FIX: Fixed an issue where reCAPTCHA v3 wouldn’t show the badge for gateways that use a custom submit button at checkout.
  • BUG FIX: Fixed edge case issues when blocks were set to hide from multiple levels.
  • BUG FIX: Fixed “WordPress database error Index column size too large.” issues on some MySQL setups.
  • REFACTOR: Updated how we enqueue blocks to follow most recent WordPress standards.
  • REFACTOR: Removed deprecated and unused code in the Stripe gateway integration code.
  • REFACTOR: Changing uses of pmpro_getOption() to get_option().
  • REFACTOR: The pmpro_edit_memberships capability has been replaced with the pmpro_edit_members capability. This cap is required to edit members in the dashboard or through the API.
  • REFACTOR: Replaced deprecated jQuery shorthands with generic handler and trigger.
  • DEPRECATED: No longer using $pmpro_levels global variable.
  • DEPRECATED: Marked the following hooks as deprecated: pmpro_admin_pagesetting_post_type_array (replaced by pmpro_admin_pagesetting_post_type), pmpro_stripe_subscription_deleted, pmpro_subscription_cancelled.
  • DEPRECATED: Removed the following functions which were previously marked deprecated: pmpro_set_pause_mode(), pmpro_cron_trial_ending_warnings().
  • DEPRECATED: No longer showing “billing address” user meta fields in the Members List table or the Members CSV export.
  • DEPRECATED: The checkout_levels API endpoint has been marked as deprecated. Please use the checkout_level (no s) endpoint instead.
Cover image from ebook 29 Nuggets of Wisdom Volume 1 - Sample Collection

Download the free ebook: Get 29 insights and ‘aha moments’ for new or veteran membership site business owners. Use these nuggets of wisdom to inspire or challenge you.

Was this article helpful?
YesNo