PMPro Update

Version of Paid Memberships Pro is out with a handful of bug fixes. These bugs have the potential to hinder sales, so be sure to upgrade.

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

The full list of updates is below.

  • BUG: Fixed bug with updating credit cards through Braintree.
  • BUG: Fixed bug with updating credit cards through Stripe.
  • BUG: Fixed SQL warnings when generating the pmpro_membership_levelmeta table. (Thanks, itibet on GitHub)
  • BUG/ENHANCEMENT: Moved some update billing and checkout related code from the preheaders and page templates into the Braintree and Stripe classes.
  • ENHANCEMENT: Added pmpro_billing_order filter that functions similar to pmpro_checkout_order.
  • ENHANCEMENT: Added pmpro_billing_before_submit_button hook that functions similar to the pmpro_checkout_before_submit_button hook.
  • ENHANCEMENT: Clicking on a report widget no longer takes you to the details page. You have to click the details button. This allows us to add additional functionality to the widgets.
  • ENHANCEMENT: Updated reports widgets so the “details” button only shows if a page function is defined for that report. You can now have report widgets without details pages.
  • ENHANCEMENT: You can now click on a heading in the Membership Stats report widget to see data for up to 3 of your levels. The first 3 levels per the level ordering are shown.

New Custom Membership Menu Widget in Nav Menus Add On

Set a Custom Menu for members by level via a new widget included in the Nav Menus Add On. The widget specifies the default menu for non-members and visitors, as well as a fallback menu for members of ANY membership level.

View the Add On

How it Works

After installing the Nav Menus Add On (or upgrading to version .3.1), navigate to the Appearance > Widgets page in the WordPress Dashboard. Here, you will see a new available widget labeled “PMPro – Custom Membership Menu” that can be placed in any available widget area in your theme.

Widget settings include:

  • Title: Set a title to display before the menu items. (optional)
  • Members Menu: Select a global menu to display for members of ANY membership level. (optional)

Click the link labeled “Click here to set menus for specific levels.” to expand more options. These options will show each active membership level on your site and allow you to assign a unique menu per level.

Menus must be created in the Appearance > Menus page of the WordPress Dashboard prior to selecting them for display in the widget.


The Default Menu shown in the “Header Right” widget area of a site using Memberlite.

The Members Menu shown to a logged-in member in the “Header Right” widget area of a site using Memberlite.

What else does the Nav Menus Add On do?

Aside from the widget, you can also use the Nav Menus Add On to swap menus set via the Appearance > Menus page of the WordPress Dashboard. For full information on this feature, see the documentation page for the Nav Menus Add On here.

Memberlite Update 3.0.2

Version 3.0.2 of Memberlite theme is out with handful of bug fixes and enhancements.

We are in the process of having the theme reviewed for the Theme Repository, but in the meantime we are still serving theme updates from our PMPro servers. We also posted about this update at Future updates will be posted only at, with maybe a link from the blog at

If you are NOT running an edited version of Memberlite or using Memberlite with a child theme, please update the theme from the updates page of your WordPress dashboard. You can also get the latest version of Memberlite here.

The full list of updates is below.

  • BUG: Fixed issue with update code when PMPro is not installed.
  • BUG/ENHANCEMENT: Now running “do_shortcode” on the “Banner Right” content.
  • BUG/ENHANCEMENT: CSS tweak for input elements in iOS browsers.
  • ENHANCEMENT: Added Narrow Width page template for an 8 column centered main content layout with no sidebar.

Updated OAuth Authentication for our AWeber Integration

AWeber is releasing an update to their OAuth authentication and API calls, and we’ve released v1.3 of our AWeber Integration Add On to meet their new requirements. Read the steps below to update, authenticate, and continue using AWeber with your WordPress site.

About the Update

Jason has updated the add on in a few ways. First and foremost it now uses the new AWeber OAuth methods. After upgrading the plugin, you will need to reauthorize the application.

The plugin now makes it more clear how to get an authorization code. We updated the display to hide the Access Key and Access Secret from the options screen to make things less confusing (these are set automatically from the authorization code). The plugin now better handles times when an app is de-authorized or a new authorization code is issued.

How to Update

  1. Navigate to the Dashboard > Updates screen in the WordPress admin.
  2. Check the box next to the “Paid Memberships Pro – AWeber Add On” and click “Update Plugins”
  3. Navigate to Settings > PMPro AWeber
  4. Verify that your app is authorized or complete the prompted steps to re-authorize your app. See this documentation page provided by AWeber for instructions on authorizing your app.

The full list of updates is below

  • BUG/ENHANCEMENT: Now fetching a new consumer key/secret pair to comply with AWeber OAUTH updates.
  • ENHANCEMENT: Making sure we don’t forget your list settings when reauthenticating with AWeber.
  • ENHANCEMENT: Added an admin notice that checks no more than once per day if the AWeber API is working and if not shows a link to the settings page.
  • ENHANCEMENT: Improved messaging to make it more clear how to authorize the app at AWeber. Compatible for the Jan 16, 2017 API updates.
  • BUG: Fixed some warnings.
  • BUG/ENHANCEMENT: Will now fetch > 100 lists if you have that many. (Thanks, Fabio on GitHub)

Run a “Sale” on Your Membership Site and Show the Regular Price with Strikethrough Style

If you want to offer a discount on membership for a temporary timeframe, but still want to remind customers of the full price, this code example for you. Users will see (and pay) the discounted price, but will be reminded of the regular price so they know they are getting a deal.

How it Works

For this example, we have a membership level that is regularly $97 but we are offering a temporary discount ($50 savings) on membership.

We’ve updated the membership level price to have an initial payment of $47, then used this code recipe (and the pmpro_level_cost_text filter to show the price as pictured above.

When you are finished offering the discount, just update your membership level price and remove the code recipe from your site.

The Code Recipe

This code recipe requires a PMPro Core Account or higher.

View Membership Options

Need help getting this to work?

The specific example above may not work for the discount you are offering, so just post to our members-only support forum (PMPro Core or Plus members) and we will help you modify the level’s price display to show your unique promotion.

Add Links by Membership Level to the Membership Account Page “links” Section

As part of our ongoing Hooks and Filters documentation updates, I wanted to post a quick recipe for how to add links to the Membership Account page under the “Member Links” section.

Available Hooks for the Member Links Section

You can use these filters in combination with the pmpro_hasMembershipLevel() function to check a user’s level before displaying links.

The Code Recipe

This code recipe requires a PMPro Core Account or higher.

View Membership Options

PMPro Update

Version of Paid Memberships Pro is out with a handful of bug fixes. In particular, we’ve fixed bugs in the Braintree gateway that could hinder sales for users of that gateway. So be sure to upgrade.

One bug on this list deserves a special note. In the past couple releases, we have included code to better check timezone settings when setting a user’s expiration date through the edit user page in the WP dashboard. This fixed some issues for some users, but also introduced an issue for users with certain timezone settings. Namely, some sites we were incorrectly updating the user’s expiration date when other edits were made through the edit user page.

For example, if your timezone was set to UTC+0 and you went to edit a user’s email address, PMPro might have reloaded that user’s expiration date to be 1 year from the current date instead of the date that was given. If you believe you may have been effected by this, you will have to double check the expiration dates for any user you edited after the last update (December 20th, 2016). We apologize for the inconvenience here and hope that only a small number of users were affected by this.

Also, we are still detecting some “off by one” type timezone issues for users who have their timezone set to a UTC value instead of a Region name. You can fix this now by choosing a timezone like “America/New_York” instead of “UTC-4”.

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

The full list of updates is below.

  • BUG: Fixed issue where end dates were being set/saved incorrectly from the edit user/profile page in the dashboard.
  • BUG: Fixed warnings in the Braintree PHP library. (Thanks, Travis Shivers)
  • BUG: Fixed issue where the filtered $mypost object was not being used in the content filter if the post type was “page”. (Thanks, James)
  • BUG: Removed the extra class=”input” attribute on the CVV field when the Stripe gateway is used. (Thanks, Rafe Colton)
  • BUG/ENHANCEMENT: Changed the number of X placeholders for masked credit cards to 12 (+ the last 4 stored) instead of 13. (Thanks, Rafe Colton)

New [haspaid] Shortcode: Show Content to Paying (or not paying) Members Only

Jason just coded up a new shortcode feature for a support customer and we wanted to share it—hooray open source! It’s a little tricky to explain, but once you wrap your brain around the features, you’ll begin to think of interesting ways to apply it to your membership site.

The shortcode is primarily useful for sites that offer free trials and want to show (or hide) content to users who are on the trial vs. those that are full paying members.

A little more detail…

The “haspaid” shortcode detailed below looks up a member’s order history and checks whether their current level or any past levels have a positive order total value. Then, using the shortcode attributes, you can show or hide content only to members that match your criteria.

For example, the image above shows an upgrade message to members on a free trial of level ID 1 that have NEVER paid for the level. This is the shortcode and content used to create that callout.

[haspaid level="1" paid="0"]
<div class="pmpro_message pmpro_default">
<h2>Unlock Additional Members-only Content!</h2>
You are currently on a free trial membership. To unlock additional content, please upgrade now to a full membership.
[checkout_button level="1" text="Upgrade to Gold Membership"]
If you’re using the Memberlite Theme, you can use the [memberlite_btn] shortcode like this:

[memberlite_btn style="action" href="/membership-checkout/?level=1" text="Upgrade to Gold Membership" icon="heart"]

Members of level ID 1 that are paying (full members) will not see this callout or any interruption in the standard content of your page/post.

Another example may be to wrap the [haspaid] shortcode inside of the [membership] shortcode to show an upgrade notice to members who USED to be a higher tier and are now a lower tier. For example:

[membership level="1"]
[haspaid level="2" paid="1"]
<div class="pmpro_message pmpro_default">
<h2>Baby come back&mdash;and save $50</h2>
I see that you used to be a Platinum level member. I wanted to extend a one-time offer for you to upgrade to Platinum today and save $50.
[memberlite_btn style="action" href="/membership-checkout/?level=2&discount_code=50OFF" text="Upgrade to Platinum Membership" icon="heart"]

Shortcode Attributes

  • paid: Accepts ‘true’ (has paid) or ‘false’ (hasn’t paid); default: true
  • level: The level ID to check against. Accepts any level ID; default: none.

Shortcode Examples

	This will show up if the user has paid for any level.
[haspaid paid='0']
	This will show up if the user has NOT paid for any level.
[haspaid paid='1' level='1']
	This will show up if the user has paid for level 1 specifically.
[haspaid paid='0' level='1']
	This will show up if the user has not paid for level 1 specifically.

The Code Recipe

This code recipe requires a PMPro Core Account or higher.

View Membership Options

In-Depth Showcase: How Rob Schwartz Used PMPro to Double His Salary While Pursuing His Dreams is a site for gaining industry certifications with the Adobe Certified Associate exams provided by Certiport. Rob Schwartz, the program’s founder, was an early adopter of Paid Memberships Pro and has been using our plugin to power his training platform for over 3 years.

Continue reading this in-depth showcase to see what technologies power the ACA Test Prep program and why it has been such a huge success for founder Rob Schwartz.

ACA Test Prep

About ACA Test Prep

ACA Test Prep is a subscription program providing the best video tutorials for the ACA exams from the top certifying teachers in the world. These exams recognize entry-level skills in the design industries of Print, Web, or Video media.

Students learn at their own pace with world-class educators with decades of experience and recognition for excellence in their fields. It’s the training students need to obtain certification from people who know how to make content engaging and easy to retain.

Go to ACA Test Prep

When looking for a membership solution for my training tutorials, I wanted a team that was capable and confident. I love that the code is all open-source, this makes me confident that I’ll never be left in the lurch if Jason and Kim decide to focus on other things (like the plugin I started with and had invested much time and money into!)

—Rob Schwartz, ACA Test Prep

Rob Schwartz, ACA Test Prep

The Paid Memberships Pro Technology

We worked with Rob and the team at ACA Test Prep to develop several features around Paid Memberships Pro to meet their unique needs. Some of the specific add ons and customizations include:

  • Student Accounts

    The site uses this add on to sell “class” or “Campus” Licenses. In this way, an institution can purchase a single login that allows a bulk number of simultaneous users to be shared among the students in their program.

  • WP Bouncer

    In combination with the Student Accounts add on, ACA Test Prep uses WP Bouncer to impose the limit of simultaneous logins they have access to. For example, if the limit is set 15 and a 16th person attempts to log in, the first person using the shared login is automatically booted.

  • Member History

    This add on allows the team to see a customer’s purchase history in one simple view.

  • Register Helper for Profile Fields

    ACA Test Prep uses our Register Helper add on to gather some helpful information when a student or institution account is created that is later used for technical support.

Other Plugins and Themes powering ACA Test Prep

The PMPro team is really there to support you as you venture out into an online business. I couldn’t be happier with my decision to go with PMPro. Customers can easily sign up online and funds go directly into my account, or I can sell through resellers and create discount codes which I can deploy with a welcome email in literally minutes.
—Rob Schwartz, ACA Test Prep

Powering the Members-only Video Library

We get a lot of requests for how to embed protected videos in a membership site. The team at ACA Test Prep currently uses FV Player Pro after moving from WP Lightbox Ultimate (also good, but not as flexible). FV Player Pro does a great job handling the videos through Cloudfront and this has cut download times in half for our videos, and there are many display options (check out the demo pages).

Videos are hosted on Amazon Web Services S3 Cloud Storage Services or via Amazon Cloudfront CDN.

We also recommend secure video hosting via Vimeo Plus or JW Player.

Paid Memberships Pro took my classroom website and allowed me to turn it into a business. I was able to get started in just a month or two, and now have 500,000 visitors monthly from all over the world, generating a healthy supplement to my job at the school. Paid Memberships Pro makes it so easy, I can generate twice my teacher’s pay in just my free time after school!

—Rob Schwartz, ACA Test Prep

Rob Schwartz, ACA Test Prep

Learn More About ACA Test Prep + PMPro

Rob prepared an excellent tutorial video demonstrating his certification program and how Paid Memberships Pro is an integral piece of his business. Watch the video below to gain more insight into the site’s software setup.

Be More Like Rob Schwartz

Paid Memberships Pro is just a tool. The real driving force behind Rob’s success is himself. He starts with in-demand knowledge and a skill for teaching that allowed him to build a compelling education product. He also has enough technical knowledge to piece together all of the various plugins and services he uses into one coherent website. He also knew where his technical knowledge was lacking and brought in a skilled developer (Jason) to complete the program, which we recommend to many of our customers who aren’t as technically “literate”.

Rob also has the tenacity to get things done. He didn’t wait for every piece of his workflow to be automated before he started selling. He didn’t wait for 100% protection against account sharing or shy away because of the many ways people take advantage of virtual products on the internet. He built strong content and focused on the good customers who wanted that content and were paying for it.

Rob is a model customer for Paid Memberships Pro, and we are excited to continue to support his business’ growth.

If you have an interesting business that uses Paid Memberships Pro in a component of its technology suite, please submit a testimonial and we will get in touch about preparing an in-depth showcase of your application.

PMPro Update 1.8.13

Version 1.8.13 of Paid Memberships Pro is out with some updates to Stripe and PayPal webhook and IPN handling along with a handful of bug fixes. Some of these bugs have the potential to hinder sales, so be sure to upgrade.

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

The full list of updates is below.

  • FEATURE: The Stripe Webhook has been updated to process subscriptions cancelled from Stripe. PMPro will now cancel memberships for these users instead of sending an email to the admin.
  • BUG: Fixed various bugs in the PayPal IPN handler.
  • BUG: Fixed search on discount codes page in dashboard. (Thanks, Debjit Saha)
  • BUG: Fixed bug in Cancellations report where all-time cancellations were always 0.
  • BUG: Fixed link to payment settings on checkout notice. (Thanks, Coen Jacobs)
  • BUG: Timezone magic on edit user page in the dashboard to make sure the expiration date you select is the one set.
  • BUG: Swapped out deprecated uses of eregi_replace and split.
  • BUG/ENHANCEMENT: Now using add_query_arg in the pmpro_url() function. (Thanks, Debjit Saha)
  • ENHANCEMENT: Updating stylesheet for WordPress 4.7 and new Twenty Seventeen theme support.
  • ENHANCEMENT: Now longer warning of membership levels with cycle numbers > 1 when using the Payflow Pro gateway since Payflow now supports cycle numbers (frequencies) > 1.
  • ENHANCEMENT: Updated da_DK translation. (Thanks, bopdoq on GitHub)
  • ENHANCEMENT: Added pmpro_include_payment_option_for_paypal filter, which can be set to false to use PayPal Website Payments Pro without the PayPal Express option.
  • ENHANCEMENT: Better dependency checking for Stripe and Braintree gateways.
  • ENHANCEMENT: Updated IPN handler and Stripe Webhook handler to use pmpro_cancelMembershipLevel instead of pmpro_changeMembershipLevel. This improves support for the MMPU addon.