The official release of Paid Memberships Pro v3.7 is here. This release focuses on member experience, communication, and admin efficiency. We’ve added native profile picture support, introduced Liquid syntax in email templates, built a full email log, and delivered powerful new tools for navigating and managing your membership site.

PMPro v3.7 builds on the groundwork laid in v3.6, bringing more flexibility to email customization, more visibility into member communications, and more control over orders and subscriptions. This update helps site owners and developers run a more transparent and organized membership business.

The rest of this post covers these key updates in more detail and highlights other enhancements, bug fixes, and developer improvements. Keep reading to learn how to update to PMPro v3.7.

Banner for Paid Memberships Pro v3.7 Release

Video: PMPro v3.7 Feature Tour

We hosted a launch party on Monday, March 23rd at 11am ET. Watch the recording below as Kim Coleman and Sam Daugherty walk through everything new in Paid Memberships Pro v3.7.

Overview of Key Features in v3.7

Alongside numerous bug fixes and enhancements, below is an overview of the key features in PMPro v3.7.

Profile Pictures

PMPro v3.7 adds built-in profile picture support. Members can upload a custom avatar that replaces their Gravatar anywhere WordPress displays an avatar: in comments, on the membership account page, member directories, and more. You can even personalize the member’s experience by displaying their avatar anywhere in your site using the pmpro_member shortcode.

Screenshot of the Edit Member screen where admins can change a member's profile picture
Screenshot of the “Edit Member” screen where admins can change a member’s profile picture

Profile pictures can be enabled in two ways:

  • Sitewide: Enable for all users in Memberships > Settings > Advanced > Other Settings > Profile Pictures.
  • Per level: Enable for specific membership levels by checking Enable Profile Pictures in the level’s Other Settings section.

When a member uploads an image, PMPro automatically crops it to a square, resizes it to a maximum of 1024px, and generates optimized sizes (96px, 256px, 512px) with retina support. The accepted file types are PNG, JPG, GIF, and WebP with a maximum size of 2 MB.

Members manage their profile picture from a dedicated Change Profile Picture page linked from their Membership Account. Administrators can also manage profile pictures from the Edit Member page in the admin.

Screenshot of the Change Profile Picture screen for members
Screenshot of the “Change Profile Picture” screen for members.

Avatar file names are anonymized then stored in wp-content/uploads/pmpro-avatars/. Files persist even if a member’s level changes, so the photo keeps showing even if they later move to a level without profile picture access.

This feature replaces the need for the Basic User Avatars plugin or any other tools you used to support local avatars. If you’re currently using that plugin, you can deactivate it after enabling PMPro’s built-in profile pictures. Reach out to our support team for help migrating a previous avatar system to the PMPro way (we have some scripts).

Liquid Syntax in Email Templates

PMPro v3.7 introduces Liquid-style template syntax in email bodies, giving you conditional logic and text formatting without writing PHP.

Screenshot of the email template editor showing a template body with Liquid syntax
Screenshot of the email template editor showing a template body with Liquid syntax.

Output tags let you display variables with optional filters:

{{ name | upcase }}
{{ discount_code | default: "None" }}

Available filters include upcase, downcase, strip, and default.

Conditional blocks let you show or hide content based on variable values:

{% if membership_level_name == "Gold" %}
Welcome to Gold! You have access to all content.
{% elsif membership_level_name == "Silver" %}
Welcome to Silver! Upgrade to Gold for full access.
{% else %}
Thanks for joining!
{% endif %}

Conditionals support comparison operators and boolean operators. You can check for empty values with the empty keyword, and nest conditionals inside each other.

Screenshot of the advanced email template logic using liquid syntax
Screenshot of the advanced email template logic using liquid syntax.

Liquid syntax works alongside the existing !!variable!! placeholders. A new variable, {{ order_total_raw }}, provides the unformatted order total for use in numeric comparisons like {% if order_total_raw > 100 %}.

The email template editor includes a collapsible Advanced Email Template Logic panel with a quick syntax reference.

Screenshot of the variable reference with liquid variables
Screenshot of the variable reference with liquid variables.

Email Template To, CC, and BCC Settings

Every email template now includes To, CC, and BCC fields directly in the template editor. Route specific notifications to additional team members, departments, or external systems: all without writing code.

You can use liquid placeholders in these fields, including {{ wordpress_admin_email }} and {{ user_email }}. Common use cases include:

  • Sending admin checkout notifications to your sales team instead of the site admin.
  • CC’ing a bookkeeper on every order-related email.
  • BCC’ing your CRM inbox to automatically log membership communications.

A new search bar in the PMPro admin header lets you instantly find members, orders, subscriptions, levels, discount codes, settings pages, reports, and PMPro documentation.

Screenshot of the PMPro admin header showing the quick search bar with a results dropdown
Screenshot of the PMPro admin header showing the quick search bar with a results dropdown.

Results are grouped by category and link directly to the relevant admin page. Quick search is fully keyboard navigable (arrow keys, Enter, and Escape) and respects WordPress capabilities so users only see results they have permission to access.

Email Log

PMPro now logs every email it sends, giving you full visibility into what was sent, to whom, and whether it was delivered.

Screenshot of the Email Log report page showing the list of logged emails with To, Subject, Status, and Timestamp columns
Screenshot of the Email Log report page showing the list of logged emails with To, Subject, Status, and Timestamp columns.

Each log entry captures the recipient, sender, CC/BCC, subject, full email body, template name, sent/failed status, timestamp, and any error message. You can click any entry to view the complete email in a modal with both rendered HTML and raw HTML views.

Access the email log from Memberships > Reports > Email Log for a site-wide view, or from the Email Log panel on individual Edit Member pages for a member-specific view.

Email logs are automatically purged after 90 days to keep your database clean. You can disable all email logging, customize the retention period, and perform a one-click purge from the Email Settings screen.

By default, only PMPro emails will be included in the log. To include all emails sent by your WordPress site, use the pmpro_should_log_email filter.

Background Exports

Member and order CSV exports now run in the background using Action Scheduler. Large exports process without blocking your browser or causing timeouts.

Exports with 500 or more items automatically run in the background, processed in batches of 250. You can navigate away, keep working, or even close your browser. The export continues on the server. Completed files are available for download for 6 hours.

Stripe Async Webhook Processing

For high-volume sites, v3.7 introduces opt-in asynchronous Stripe webhook processing. Time-sensitive events (like checkout completions) still process immediately, while deferrable events (like renewal payments) can be queued via Action Scheduler.

This helps sites that experience heavy renewal traffic or encounter duplicate webhook processing. Enable it with the filter pmpro_stripe_webhook_enable_async_processing.

add_filter( 'pmpro_stripe_webhook_enable_async_processing', '__return_true' );

Orders and Subscriptions Admin Filters

The Orders and Subscriptions admin pages now include a collapsible sidebar filter panel, giving you powerful tools to narrow down your data without custom queries.

Screenshot of the orders admin page with the filter sidebar open showing Level, Status, Date Range, Discount Code, Gateway, and Total filters
Screenshot of the orders admin page with the filter sidebar open showing Level, Status, Date Range, Discount Code, Gateway, and Total filters.

Orders can be filtered by Level, Status, Date Range (predefined or custom), Discount Code, Gateway, and Total (paid vs. free).

Subscriptions can be filtered by Level, Status (Active, Cancelled, Sync Error), and Gateway.

Screenshot of the subscriptions admin page with the filter sidebar open to filter by Level, Status (Active, Cancelled, Sync Error), and Gateway.
Screenshot of the subscriptions admin page with the filter sidebar open to filter by Level, Status (Active, Cancelled, Sync Error), and Gateway.

Click the Filter Results button to open the panel. A count badge shows how many filters are active, and each active filter displays a green dot indicator. Filters persist in the URL, so you can bookmark or share filtered views.

Site Health Information

PMPro v3.7 adds comprehensive debug information to the WordPress Site Health screen (Tools > Site Health > Info). The new PMPro section displays your payment gateway configuration, Action Scheduler health, membership levels, custom templates (with version comparison), library conflicts, and more.

A new site health test also checks for incorrectly named Add On folders and flags them as a critical issue, helping you catch installation problems before they cause errors.

Other Enhancements and Changes

Beyond the major features above, v3.7 includes several other improvements:

  • Subscriptions admin: The Subscriptions admin page now follows the same view/edit pattern as the Orders page, with a consistent layout for viewing, editing, linking, and cancelling subscriptions.
  • Billing page: The Billing page no longer redirects away after a successful billing update. Members stay on the page and see a confirmation message.
  • reCAPTCHA v3 scoring: reCAPTCHA v3 now performs full score-based validation. PMPro evaluates the bot-likelihood score (default threshold: 0.5) and blocks low-scoring submissions. Customize the threshold with the pmpro_recaptcha_v3_min_score filter.
  • New email variables: Added {{ order_total_raw }}, {{ order_gateway }}, {{ wordpress_admin_email }}, and {{ pmpro_from_email }}. The {{ siteemail }} variable is soft-deprecated in favor of {{ pmpro_from_email }}.
  • Light/dark color scheme support: Frontend contextual messages now use the CSS light-dark() function, automatically adapting colors when a WordPress theme declares a named color scheme.
  • Membership ID in member exports: The membership_id field is now included by default in member CSV exports.
  • Removed bundled translation files: Core translation .po and .mo files are no longer bundled with the plugin. PMPro now fully relies on our GlotPress server for translation management, reducing plugin file size.
  • Required PHP version updated to 7.4: The minimum required PHP version has been raised from 5.6 to 7.4.
  • Admin toolbar accessibility: The admin toolbar menu items have been updated with improved screen reader text and aria-hidden attributes for better accessibility.
  • Members Per Level report caching: The Members Per Level report is now cached for improved performance on sites with many levels.
  • Block editor compatibility: Moved to enqueue_block_assets hook and resolved block editor warnings.
  • Capability updates: Changed capability check for admin user fields to pmpro_edit_members and added capability check for PMPro restricted directory access.
  • Removed SQL_CALC_FOUND_ROWS: Replaced the deprecated MySQL modifier with a standard COUNT() query for better database compatibility.

Deprecations

  • Subscription Check Add On: This Add On is deprecated. The subscription verification functionality it provided is now handled natively by the core plugin.
  • pmpro_doing_webhook() read usage: Reading webhook status via this function is deprecated. The function still works for setting webhook status, but using it to check whether a webhook is processing will trigger a deprecation notice.

How to Update to PMPro v3.7

You can update to PMPro v3.7 directly from the Dashboard > Updates screen in the WordPress admin or download the latest version here.

Before Updating:

  1. Backup Your Site: Always create a full backup before making major updates.
  2. Check Custom Code and Add Ons: If you have customizations or third-party integrations, test on a staging site first.
  3. Review the Full Changelog: See the detailed list of changes below.

This release continues our commitment to building the most flexible and powerful open source membership platform. Thanks for being part of the PMPro community—we can’t wait to see what you build next.

Providing Feedback on PMPro v3.7

Here’s how to share your feedback.

Your insights and contributions are invaluable to the improvement of PMPro.

PMPro v3.7 Full Changelog

  • FEATURE: Added native profile picture (avatar) support, allowing members to upload custom avatars managed entirely within PMPro instead of relying on Gravatar.
  • FEATURE: Added a Quick Search feature for navigating Memberships admin pages.
  • FEATURE: Added Liquid-style template rendering for email bodies with support for variables, filters, and conditionals.
  • FEATURE: Added email logging for all emails sent by PMPro. The new pmpro_should_log_email filter can be used to enable email logging for non-PMPro emails as well.
  • ENHANCEMENT: Added sidebar filter panels for the orders and subscriptions admin pages with support for level, status, date range, discount code, gateway, and total filters.
  • ENHANCEMENT: Added To, CC, and BCC settings to the Email Templates editor.
  • ENHANCEMENT: Members and orders CSV exports now use Action Scheduler for improved reliability on large datasets.
  • ENHANCEMENT: Added optional Action Scheduler support for deferrable webhook events.
  • ENHANCEMENT: Added Site Health critical issue notification when plugins are using incorrect folder names.
  • ENHANCEMENT: Added a restricted directory check to detect and report issues with the protected files directory.
  • ENHANCEMENT: Improved support for reCAPTCHA v3 with score validation, defaulting to 0.5 and customizable via the pmpro_recaptcha_v3_min_score filter.
  • ENHANCEMENT: Adjusted the Update Billing page to no longer automatically redirect away to the account page.
  • ENHANCEMENT: Updated the Subscriptions admin screens to match the orders admin screens for view, edit, and link styling.
  • ENHANCEMENT: Removed use of the deprecated SQL_CALC_FOUND_ROWS modifier across all queries.
  • ENHANCEMENT: Consolidated membership signup and cancellation queries for improved performance on dashboard reports.
  • ENHANCEMENT: Now caching the Members Per Level report for improved dashboard performance.
  • ENHANCEMENT: Added membership_id as a default column in the Members List CSV export.
  • ENHANCEMENT: Now supporting light-dark values for contextual message CSS custom properties.
  • ENHANCEMENT: Added PMPro icon to the admin menu and updated the top menu bar to use an icon with screen reader text.
  • BUG FIX/ENHANCEMENT: Updated the checkout form submit handler to improve reliability of payment processing.
  • BUG FIX/ENHANCEMENT: Updated the capability check for viewing admin user fields to use pmpro_edit_members.
  • BUG FIX: Fixed dependencies for the content visibility block component to prevent enqueue issues.
  • BUG FIX: Fixed a default height prop warning in block editor components.
  • BUG FIX: Fixed a console warning in WordPress 6.3+ by moving block asset enqueuing to the enqueue_block_assets hook.
  • BUG FIX: Fixed slashed level names displaying with backslashes in the setup wizard.
  • REFACTOR: Refactored the Stripe webhook handler into a new PMPro_Stripe_Webhook_Handler class.
  • REFACTOR: Removed unused test scripts.
  • DEPRECATED: Marked the Subscription Check Add On as deprecated on the Add Ons page.
  • DEPRECATED: Reading webhook status via pmpro_doing_webhook() is now deprecated. Use pmpro_doing_webhook( $gateway, true ) for write mode only.
  • DEPRECATED: The pmpro_before_members_list_csv_export and pmpro_after_members_list_csv_export actions are deprecated and no longer fired.
  • DEPRECATED: Removed bundled core translation files to reduce the shipped plugin package size.


Was this article helpful?
YesNo