Paid Memberships Pro v3.9 - WordPress Plugin
The most complete member management and membership subscriptions plugin for WordPress Paid Memberships Pro gives you all the tools you need to start, manage, and grow your membership site.
Same brand
More from Paid Memberships Pro
Paid Memberships Pro Limit Logins
by Paid Memberships Pro v3
The Limit Logins Add On restricts simultaneous logins for the same user account, ensuring members cannot share their login credentials with others.
Paid Memberships Pro Google Analytics Integration
by Paid Memberships Pro v3
Google Analytics Integration for GA4 to measure traffic, interactions, and ecommerce conversions across your WordPress membership site.
Paid Memberships Pro - Abandoned Cart Recovery
by Paid Memberships Pro v3
The Abandoned Cart Recovery Add On helps maximize your membership site’s revenue by re-engaging users who did not complete checkout.
Related items
Related Membership Plugins
Profile Builder Pro - WordPress Profile Plugin
by Cozmoslabs
Login, registration and edit profile shortcodes for the front-end.
Memberpress Pro - #1 WordPress Membership Plugin
by MemberPress
MemberPress will give you the ability to confidently create, manage and track membership subscriptions and sell digital download products
SureMembers - WordPress Membership Plugin
by SureCart
SureMembers is the fastest and easiest way to protect content on your website.
The most complete member management and membership subscriptions plugin for WordPress
Paid Memberships Pro gives you all the tools you need to start, manage, and grow your membership site. The plugin is designed for premium content sites, online course or LMS and training-based memberships, clubs and associations, members-only product discount sites, subscription box products, paid newsletters, and more.
Users can select a membership level, complete checkout, and immediately become members of your site. You decide what content your member can access. Members can log in, view payments, update billing info, or cancel their account directly on your site.
Recent releases
Release history
- SECURITY: Improved escaping and SQL query preparation throughout the plugin. #3827 (@dparker1005)
- SECURITY: Added direct file access protection to plugin files. #3828 (@dparker1005)
- SECURITY: Improved request input handling and redirect safety throughout the plugin. #3829 (@dparker1005)
- SECURITY: The Authorize.net gateway now verifies TLS certificates when connecting to Authorize.net. #3916 (@dparker1005)
- SECURITY: The 2Checkout gateway now verifies TLS certificates when sending API requests. #3917 (@dparker1005)
- SECURITY: The `[pmpro_member]` shortcode is now also removed from newly added post meta saved by users who cannot edit users. #3921 (@dparker1005)
- SECURITY: The REST API order endpoint now only includes order notes for users with the `pmpro_orders` capability. #3918 (@dparker1005)
- SECURITY: Values in the members, orders, and logins report CSV exports that start with a spreadsheet formula character are now prefixed with a single quote so they are not run as formulas. #3922 (@dparker1005)
- SECURITY: The admin redirect for missing members, orders, subscriptions, discount codes, and levels now only runs for users who can access the Memberships menu. #3920 (@dparker1005)
- SECURITY: The Billing page now redirects to the Membership Account page when the requested subscription does not exist. #3919 (@dparker1005)
- Merged the Subscription Delays Add On into core. The new First Recurring Payment setting on levels and custom pricing discount codes can delay the first recurring payment by a number of days or until a date set with a date pattern. #3630 (@dparker1005, @kimcoleman)
- Merged the Set Expiration Dates Add On into core. Levels and custom pricing discount codes can expire memberships on a date set with a date pattern. #3630 (@dparker1005, @kimcoleman)
- Added percentage and fixed amount discount code types alongside the existing per-level custom pricing. The discount is calculated from each level's current pricing and can apply to the initial payment, recurring payments, or both, while the billing cycle, trial, and expiration come from the level. #3727 (@dparker1005)
- Added a migration tool for deprecated gateways, opened from the "Migrate Subscriptions Off This Gateway" button on the gateway's Payment Settings page. It recreates active subscriptions at Stripe (or sets the memberships to expire), can email members, cancels the old gateway subscriptions, and supports a dry run. A final step deletes the gateway's stored API credentials and stops loading the gateway; orders and subscriptions are kept. #3700 (@dparker1005)
- Added WordPress Abilities API support (WordPress 6.9+) for querying membership levels, orders, subscriptions, and PMPro search results, and for viewing, changing, and cancelling a member's memberships. Abilities are available over the REST API and to MCP clients through an MCP adapter plugin. #3736, #3757 (@mircobabini, @dparker1005)
- Added a `wp pmpro` WP-CLI command set for memberships, members, levels, orders, and subscriptions, and the `pmpro_cli_init` action for Add Ons to register their own commands. #3740, #3757 (@flintfromthebasement, @dparker1005)
- Added `/pmpro/v1/memberships`, `/pmpro/v1/orders`, and `/pmpro/v1/subscriptions` REST API collection endpoints with filtering, sorting, and pagination. #3740, #3757 (@flintfromthebasement, @dparker1005)
- The Subscription Delays and Set Expiration Dates Add Ons are now automatically deactivated and can no longer be activated. Their saved settings are used as-is, their filters still run, and their helper functions remain as deprecated wrappers. Custom code that removed the Add Ons' own hook callbacks no longer has any effect. #3630 (@dparker1005)
- Added an "Awaiting Payment Method" filter and tag on the Subscriptions list, an admin notice, and a Membership Account page notice for subscriptions migrated to Stripe that have no payment method on file. The default Recurring Payment Reminder email now asks these members to add a payment method. #3700 (@dparker1005)
- Added the "Deprecated Gateway Stripe Migration" and "Deprecated Gateway Checkout Required" email templates, shown on sites that still use a deprecated gateway. #3700 (@dparker1005)
- The "Update Billing Info" links on the Membership Account and Billing pages no longer require the subscription to have an order. The Billing page link now only shows for subscriptions on the active gateway when that gateway supports payment method updates, matching the Membership Account page. #3700 (@dparker1005)
- Added the `pmpro_deprecated_gateway_batch_size` filter to set how many subscriptions the deprecated gateway migration processes per batch. #3700 (@dparker1005)
- Added a captcha to the login and lost password forms, including wp-login.php, when reCAPTCHA or Cloudflare Turnstile is enabled. The captcha is only shown after a failed login or other suspicious activity from the visitor's IP address in the last 15 minutes. #3765 (@dparker1005)
View changelog
- SECURITY: Fixed an issue where a failed Cloudflare Turnstile check allowed later checkout and billing update submissions in the same session to skip the security check. #3884 (@dparker1005, Jenny Dougherty)
- Added the `pmpro_account_profile_list_items` filter to customize the profile items on the Membership Account page. The Username and Email items now also have their own CSS classes. #3870 (@dparker1005)
- Added edit and view page buttons to the Terms of Service setting. #3881 (@dparker1005)
- Applying an empty discount code at checkout now shows an error message. #3866 (@dparker1005)
- When an admin refund fails, the notice now includes the payment gateway's error message. #3883 (@dparker1005)
- Fixed the membership required message showing twice on restricted content when Elementor and Yoast SEO are both active. #3879 (@dparker1005)
- Restricted Elementor widgets are no longer rendered as empty styled containers for users without access. #3875 (@dparker1005)
- Fixed the level confirmation message losing its paragraph formatting in checkout emails. #3861 (@dparker1005)
- Fixed the default "More Information" heading not showing for the checkout_boxes field group, and the `pmpro_default_field_group_label` filter being ignored. #3859 (@dparker1005)
- Fixed a deprecation notice when using the `pmpro_default_field_group_label` filter. The legacy `pmprorh_section_header` filter is now the one flagged as deprecated. #3888 (@dparker1005)
- Textarea user field values now keep their line breaks when displayed. #3878 (@dparker1005)
- Fixed `[pmpro_account]` shortcode attributes being ignored when the same page also has a `[pmpro_account]` shortcode or Membership Account block without attributes. #3877 (@dparker1005)
- PMPro page settings are now cleared when the assigned page is trashed or deleted, and restored if the page is restored from the trash. #3872 (@dparker1005)
- Page Settings no longer shows edit and view buttons for an assigned page that isn't published. #3886 (@dparker1005)
- Renew links and the redirect for already-submitted orders now use the `pmpro_level` URL parameter instead of `level`. #3876 (@dparker1005)
- Gateway cancellations now cancel memberships for members whose level is hidden by the `pmpro_has_membership_level` filter, such as unconfirmed Email Confirmation members. #3867 (@dparker1005)
- Gateway cancellations for deleted users are no longer logged as errors. #3882 (@dparker1005)
- Fixed fatal errors when checkout email or password fields were submitted as arrays. #3855 (@dwanjuki)
- Recurring levels now save a billing cycle number of at least 1. #3865 (@dparker1005)
- Deleting an order now also deletes its order meta. #3869 (@dparker1005)
- Deleting an order now keeps all Orders list filters, sorting and the current page. #3868 (@dparker1005)
- Paginating or sorting after deleting a discount code or order no longer repeats the delete request. #3863 (@dparker1005)
- The personal data exporter now shows array user meta as readable text instead of serialized data. #3860 (@dparker1005)
- Fixed a PHP warning in `pmpro_has_membership_access()` when the post doesn't exist. #3862 (@dparker1005)
- Failed AJAX and REST API logins no longer redirect to the login page. #3864 (@dparker1005)
- The Logins report now tracks visits after a member logs in or out. #3871 (@dparker1005)
- The membership section and Edit Member link are now hidden on Network Admin user profiles. #3880 (@dparker1005)
- Updated the GPL license link on the License page. #3856 (@dparker1005)
View changelog
- SECURITY: Files uploaded through user fields are now stored in uniquely named folders, and are deleted when the user is deleted. #3847 (@dparker1005, @GrayOM)
- SECURITY: Fixed restricted post excerpts showing in RSS feeds, embeds, and the Post Excerpt block when "Show Excerpts to Non-Members" is off. #3853 (@dparker1005, @Feldspar-AI-Agent)
- SECURITY: The member edit screen's User Info panel now requires permission to edit the specific user being edited, and only accepts a password when creating a new user. #3835 (@dparker1005)
- SECURITY: User fields can no longer save to the user meta key that stores roles and capabilities. #3848 (@dparker1005)
- Pending checkout uploads are now deleted when their order is deleted. #3847 (@dparker1005)
- Fixed a fatal error when changing membership levels while WP Fusion Lite is active but not connected to a CRM. #3834 (@andrewlimaza)
- Checkout now stops with an error when the chosen username could not be used to log in, instead of silently saving a different username. #3837 (@faisalahammad)
- Fixed the file field Delete button showing to all users when `allow_delete` was set to `admins`. #3847 (@dparker1005)
- Fixed user field file uploads being rejected when the file extension's case did not match the field's allowed file types. #3850 (@dparker1005)
- Fixed a PHP warning and a missing file extension on temporary upload files for checkouts that are completed later, such as Stripe Checkout and PayPal Express. #3851 (@dparker1005)
- Fixed export downloads failing when a plugin filters `random_password` to add special characters to generated passwords. #3849 (@dparker1005)
- Stripe webhooks no longer try to update a subscription's application fee on sites using API keys, which logged failed requests in Stripe. #3852 (@flintfromthebasement)
Frequently asked questions
Is Paid Memberships Pro GPL licensed?
What is the latest version of Paid Memberships Pro?
How much does Paid Memberships Pro cost on GPLCoffee?
Which WordPress and PHP versions does Paid Memberships Pro support?
Is Paid Memberships Pro safe to download?
Auto-updates included
Install it once, update automatically.
The GPLC Connector installs this plugin from your wp-admin and rolls out new versions to your connected sites. Included with every membership plan: 10 to 40 connected sites depending on the plan (Lite 10, Pro 20, Geek and Lifetime 40).