Customizing the Member Cancellation Process

The Membership Cancel page includes a shortcode that allows members to immediately cancel their membership. This post covers some alternative methods to manage or modify the default behavior of member cancellations.

Don’t want to allow members to cancel?

The default [pmpro_cancel] shortcode outputs a message and button that a member would click to cancel their account.

One of the commonly requested features is to remove this behavior and require members to contact you in order to cancel their membership.

To do this, navigate to Memberships > Page Settings and click “Edit” for the page assigned as the “Membership Cancel” page. Then, remove the [pmpro_cancel] shortcode and replace it with your desired content. You could simply put a message and a contact email address, such as:

Please contact us as to request a membership cancellation.

Or, add a contact form using a plugin such as Gravity Forms, Ninja Forms, Caldera Forms, or the “Feedback” module of Jetpack.

Downgrade Membership instead of Canceling

If you offer a “free” membership level, this post includes the recipe to change a member’s level when they cancel or expire. Using this method, a member could use the default cancellation process, their paid membership level would be removed, any attached subscription at the gateway will be cancelled, and their membership level will be changed to your default (downgrade) level.

View the Tutorial

Delete the User Account

If you run a VERY tight ship and want to remove the WordPress user when they cancel their account, this post includes the recipe to do so. We don’t recommend doing this as it messes up a lot of data in Memberships > Orders. It’s also smart to maintain a list of canceled members for future marketing efforts. Perhaps you would like to invite them back at a discount or offer a new membership that wasn’t previously available. That said, there can be other reasons that you would need to delete the user account so we still want to demonstrate how this is done.

View the Tutorial

Cancel a Member Automatically After Failed Subscription Payment

This method doesn’t relate to a member canceling themselves, but rather when the gateway lets your site know that a member’s subscription payment failed. The Failed Payment Limit Add On allows you to specify a number of “tries” before the membership is cancelled.

Be sure to check with your gateway settings, as some gateways (such as Stripe) allow you to set rules related to retries and failed payments on recurring subscriptions. These can override the settings of the Failed Payment Limit Add On.

View the Add On

Have another creative member cancellation request?

This post has covered a few alternative / custom methods as related to member cancellations. If you have another idea on how you would like to manipulate cancellations, post a comment below or open a topic in our member forums for support on the methods described above.

Allow Members to Favorite Posts using the Favorites Plugin for WordPress

Add a special feature for your members that allows them to mark posts as “Favorites”. Then, show your members their bookmarked posts on the Membership Account page. Below are two code recipes that integrate Paid Memberships Pro with Favorites by Kyle Phillips.

This page requires a PMPro Core Account or higher.

Already have an account? Login Now »

New to this site? Register Now »

Memberships Levels Page: Order, Hide the Display, or Skip it Mega Post

We have several tutorials for altering the membership levels page using the default [pmpro_levels] shortcode or the Advanced Levels Page Shortcode Add On. This post summarizes several methods to:

It’s a useful guide if you aren’t quite sure of a method to use and want to explore your options.

Reordering the Membership Levels Display

Navigate to the Memberships > Membership Levels page in the WordPress Admin. Here you can drag and drop the membership levels into the order you would like them to display when using the default [pmpro_levels] shortcode or the [pmpro_advanced_levels] shortcode.

Drag and Drop Membership Level Order

If you are using the [pmpro_advanced_levels] shortcode, you can also specify the levels="2,4,1" attribute to force the display in your preferred order. This method will simultaneously reorder the display AND filter out levels you do not want to display.

Hide Free Levels from the Membership Levels Display

Here’s a tutorial for hiding all the free levels from display. This is a useful method if you have free levels that are reserved for specific customers or promotions, etc.

View the Tutorial

Hiding Specific Levels (by ID) from the Membership Levels Display

To hide levels using the [pmpro_advanced_levels] shortcode, just exclude them from thelevels="1,2,3" attribute of the shortcode. Easy!

If you are using the default [pmpro_levels] shortcode, you have two options for hiding levels from the output:

Option 1: Define hidden levels in a custom function.

The code recipe below allows you to define specific level IDs that will not be shown on your membership levels page.

This code recipe requires a PMPro Core Account or higher.

View Membership Options

Option 2: Add a setting to “hide” levels from display on the Memberships > Edit Level admin.

This code recipe adds a new level setting to hide the display. If you expect to be manipulating level display fairly often and would prefer to do so via settings in the dashboard vs. code, this is the recipe for you. After installing the customization code, just navigate to Memberships > Edit Level and set “Show level” to “Yes” or “No”.

This code recipe requires a PMPro Core Account or higher.

View Membership Options

Skipping the Membership Levels Page

If you have only one public level of membership, this method will redirect members from the membership levels page directly to membership checkout for the defined PMPRO_DEFAULT_LEVEL.

View the Tutorial

Skipping the Membership Checkout Process

As with the “skipping” option above, this method will allow you to use the default WordPress registration process (or another plugin or theme’s registration process) and apply a default level of membership.

View the Tutorial

Ask “How did you hear about us?” at Membership Checkout

This code recipe adds a field to ask new members how they were referred to your site via the Register Helper Add On. The member can select the referring source via dropdown or enter a custom “Referred by” value. The field is display in the User Profile and Members List Export for admins only.

This page requires a PMPro Core Account or higher.

Already have an account? Login Now »

New to this site? Register Now »

Lock Your Entire eCommerce Shop for Members-Only

The code recipes below demonstrate how to restrict your online store to members-only using WooCommerce or Jigoshop. If you’re using a different eCommerce plugin, post a topic in our member forums and we will help you get the restriction in place.

This page requires a PMPro Core Account or higher.

Already have an account? Login Now »

New to this site? Register Now »

Email Marketing Integrations for Paid Memberships Pro

Below is a list of the third-party email marketing integrations available for Paid Memberships Pro.

Third-Party Email Marketing Platforms

Sign Up for AWeber

AWeber Integration

Integrate User Registrations with AWeber. Adds members to lists based on their membership level.

Sign Up for Constant Contact

Constant Contact Integration

Integrate User Registrations with Constant Contact. Adds members to lists based on their membership level.


ConvertKit Integration

Integrate your ConvertKit tags with Paid Memberships Pro membership levels. This Add On is provided and supported by ConvertKit.

Sign Up for GetResponse

GetResponse Integration

Add users to GetResponse campaigns, with or without Paid Memberships Pro.

Sign Up for MailChimp

MailChimp Integration

Integrate User Registrations with MailChimp. Adds members to lists based on their membership level and includes level ID and name as merge fields.

On-Site User Email Systems

Email Users Integration

Easily kick off an email to your WordPress site users directly in the WordPress admin. You can segment users by a few criteria, including their Paid Memberships Pro “Membership Level”. The Paid Memberships Pro integration is built in to the core plugin.

View the Plugin

MailPoet Integration

Adds a checkbox on checkout page for your customers to subscribe to your MailPoet newsletters. This Add On is provided and supported by MailPoet.

View the Plugin

Capture Default WP User Profile Fields at Membership Checkout using Register Helper

Our Register Helper Add On allows you to add new profile fields at membership checkout. This recipe will demonstrate how to use that add on to capture and populate the default fields in the WordPress User profile.

Default WP User fields at checkout

What are the default WordPress User fields?

The WP_User class has the following core fields that you may want to capture at membership checkout. It’s important to use the exact field “key” so that captured fields are properly matched to the default profile field.

Field Key Field Name
user_login Username*
first_name First Name
last_name Last Name
nickname Nickname
email Email Address*
url Website
description Biographical Info

* This field is already captured at Membership Checkout with a default Paid Memberships Pro setup.

Capture First and Last Name

You can skip the methods below and use the Add Name to Checkout Add On to instantly add the fields for First Name and Last Name on membership checkout. This method does not require Register Helper.

View the Add On

Use Billing Name as First and Last Name

This tutorial shows you how to synchronize fields from the Billing Information section of membership checkout with user meta fields, included custom fields added via the Register Helper Add On or fields core to the WordPress user object.

View the Tutorial

Capture Some Other Default User Meta Field

Below is the code to use the Register Helper Add On to capture the “Biographical Info” and “Website” fields at membership checkout.

Copy and paste this code recipe into your theme’s functions.php file or a helper PMPro Customizations plugin (our recommended method).

Hide “Discount Code” field on Membership Checkout for Free or Specified Levels

If your membership site makes use of discount codes, the fields to enter a code will appear on the membership checkout page for all levels. Use the code recipe below to hide these fields for a free membership level checkout or for specific levels you don’t offer discounts for.


But wait, why don’t you just do this automatically?

Some people make use of the Discount Codes in unique ways – even for their “free” levels. For example, we have one customer using these codes as “Invoice Numbers” that are mapped to a specific dollar amount. The member selects the “level” which has no fee, but enters the provided “code” to pay their amount owed. Or, some use discount codes to extend a free trial period.

This page requires a PMPro Core Account or higher.

Already have an account? Login Now »

New to this site? Register Now »

Database Script: Apply a membership level to all users without a level

This advanced code recipe contains a SQL script to run against your WordPress site’s database. You can use Adminer, phpMyAdmin, or your host’s MySQL management tool of choice to execute the query.

The script will apply a membership level (by ID) and expiration (optional) to all users in the wp_users table that do not already have a membership level. This is useful for sites that already have a large number of “users” that you would like to be placed into a default membership level or a grandfathered-in membership level from an older system.

For more advanced bulk member update or import features, see our Import Users from CSV Add On.

This page requires a PMPro Core Account or higher.

Already have an account? Login Now »

New to this site? Register Now »

Improved Documentation on Shortcodes and Hooks/Filters

Proper documentation is critical to making sure Paid Memberships Pro users can take full advantage of all plugin features. That’s why we’re devoting time to improving the core plugin and add on documentation throughout this site.

Shortcodes Documentation

Until now, we didn’t have a central spot that described how to use the plugin’s included and “code recipe” shortcodes. We just added a page with three sections for the different “types” of shortcodes in Paid Memberships Pro.

  • Page Shortcodes that generate the forms and display elements for pages assigned under Memberships > Page Settings in the admin.
  • General Shortcodes that can be used anywhere on your site for various features.
  • Shortcode Recipes that offer PMPro Core and Plus members access to specialty shortcodes not currently part of the core plugin.

View Shortcode Docs

There are also shortcodes available in specific add ons, such as the Member Directory and Profile Pages Add On, that may eventually get some overlapping documentation in this section.

Hooks and Filters Documentation

Inspired by the formatting of the Developer Resource site, we’ve improved the display, deep linking to GitHub, and example recipes for our library of hooks and filters.

You’ll see the documentation here build out over the next couple weeks. The first phase was updating all existing hooks and filters in the library, then we added 25 new hooks and 78 new filters that were missing documentation. These hooks and filters had been added to the core plugin but not yet documented.

We also are setting up a system that links the hook or filter to code recipes we’ve published that leverage that hook or filter. This should help designers and developers in the future who have identified a hook they need to use, but want to see some examples of how you can use that hook to achieve a desired outcome.

View Hooks and Filters Docs

Documentation is an ongoing effort.

In doing all of this, we have uncovered more places where documentation would be useful, including a section to show all the PHP functions included in PMPro (like the pmpro_hasMembershipLevel function) that you can make use of in your custom projects or plugins and themes that offer integration. It’s in the works 🙂