Enhance Your Membership Levels Page with Member Badges

We’ve just added hooks to the Advanced Levels Page Shortcode Add On, allowing you to add unique content before and after the level information.

This recipe integrates the Member Badges Add On and displays the badge associated with each level in the output.

Member Badges on a Three Column Layout

The Code Recipe

This code recipe requires a PMPro Core Account or higher.

View Membership Options

Member Badges on a Table Layout

The Code Recipe

This code recipe requires a PMPro Core Account or higher.

View Membership Options

Available Hooks in the Advanced Levels Page Shortcode v.2.4+

Hooks for the “div” and “column” layouts:

do_action( 'pmproal_before_level', int $level_id, int string $layout );
do_action( 'pmproal_after_level', int $level_id, int string $layout );

Hooks for the “table” layout:

do_action( 'pmproal_extra_cols_before_header' );
do_action( 'pmproal_extra_cols_after_header' );
do_action( 'pmproal_extra_cols_before_body' );
do_action( 'pmproal_extra_cols_after_body' );

Note: hooks have not yet been added for the compare_table layout

Set a Member Author’s Posts to Draft When Membership is Cancelled

If you allow guest authors on your membership site as a feature of membership, this recipe will demonstrate how to automatically change their posts’ statuses to “draft” when membership is cancelled.

This page requires a PMPro Core Account or higher.

Already have an account? Login Now »

New to this site? Register Now »

How to Name Your Membership Levels or Subscription Options

How you name your membership levels is one of the most important components for conversions on your membership on site.

Let’s spend some time thinking about membership level names. We’ll cover the classic membership site structures and provide examples for naming the membership levels or subscription options for each case. (And there’s even a nifty “level name” playground that tests your name within various plugin-generated phrases.)

Take a step back and evaluate your membership level names.

I work with thousands of membership sites and have seen a lack of clarity (and creativity) in this key area. The membership level name identifies what the member is receiving in exchange for their membership fee. In some cases, the name is a badge of pride for your members, turning them from the anonymous “visitor” to a member of the “in-crowd”.

Putting all of this touchy-feely stuff aside, the level name is also used in various default “phrases” within your membership site system. You need to make sure your level name “reads well” within these phrases. I’ve created a simple tool at the end of this article that provides a litmus test for your level names within the key system phrases in Paid Memberships Pro.

Membership Site Structures Covered include:

Tiered/Hierarchical Levels

This flavor of membership site offers more (or fewer) features based on membership level. This is the structure of our own site here at Paid Memberships Pro. We offer a Free, Core and Plus level. I think the level names are OK, and they do imply a tier (Plus being the highest membership option available).

Here are some level name ideas based on the “tier”

Tier 1
  • Basic
  • Beginner
  • Starter
  • Primary
  • Bronze
  • Baby Bear

Tier 2
  • Intermediate
  • Enhanced
  • Standard
  • Secondary
  • Gold
  • Papa Bear

Tier 3
  • Advanced
  • Ultimate
  • Extreme
  • Professional
  • Platinum
  • Mama Bear (just right!)

Price/Payment Term Structured Levels

Use this level naming structure when all membership levels offer the same package of features, but vary based on price or term. First, try to think of something clever based on your specific name, brand or site topic.

If your membership site was a sports team, what would you call your fans?

You can give membership an overall brand, such as “Trekkies”, “Bronies”, or “Cheeseheads”. Then use your level names to clarify the price or payment term.

You may still have an idea of “tier” in this structure, such as a Foodie Box site that offers 3 Month, 6 Month, and Annual subscriptions, with the option to “add on” a dessert box. For this case, I’d suggest reading through my post on price-adjusting Register Helper fields to have a selection at checkout modify the level price. Easy as pie.

Here are some level name ideas based on the price/term

  • Daily *
  • Weekly
  • Monthly
  • Quarterly
  • Yearly

  • Annual
  • Per Annum
  • Bi-Weekly
  • Bi-Monthly
  • Semi-Annual

  • Half-Yearly
  • Perennial
  • Lifetime
  • Forever
  • Eternal

* Note that not all integrated gateways offer “daily” subscriptions.

Content Vertical/Category-specific Levels

In this type of membership site, the membership levels differ not by features, but by type of content or “vertical”. This is common in a stock or investing site, nationwide membership chapters site, or an online dating site where identifying the member’s “interest” is handled via the membership level selected.

Here are some level name ideas based on the content vertical

  • Stock/Investing Sites: Technology Sector, Gas and Oil, Retail, Pharmaceuticals
  • Member Chapter Sites: Country Name, State Name, County Name
  • Online Dating Sites: Man Seeking Woman, Woman Seeking Man, Man Seeking Man, Woman Seeking Woman, etc.

User or Member-type Levels

This is a category of membership site where the member receives a different level/price/package based on the type of member they are. Check out our Sponsored/Group Members Add On if you have a membership level that offers parent/child account relationships.

Here are some level name ideas based on the user/member-type

  • Individual
  • Student
  • Parent
  • Family

  • Senior
  • Corporation
  • Volunteer

  • Teacher
  • Non-Profit
  • Military: Active Duty and Veterans

Content Delivery/Subscription Type Levels

For this type of membership site, the levels differ by how the content is received. It will make more sense after reading the level names below, but basically this case is used when the content is offered in various formats (online, print, email), and the selected level determines the members’ preferred method(s) of content delivery.

For this case, you could use the same membership branding concepts covered in the Price/Payment Term Structured Levels section above, then use the level names to clarify content delivery.

Here are some level name ideas based on the type of content delivery

  • Online Only
  • Print Only
  • Online and Print
  • Email Newsletter

Sponsorship Level/Benefactor Tiers

If you’re a non-profit organization, you most likely think about membership a bit differently than most other site types. In your case, membership level is actually sponsorship level, and you have a chance to get really creative in how you name your tiers.

A great approach to level naming is to pull ideas from the goals of your organization, your location, the group or cause you represent.

Instead of coming up with my own examples, I’ve compiled a few non-profits and their benefactor/membership tier names below:

The Franklin Institute’s Benefactor Society

  • Pendulum Partners
  • Baldwin Circle
  • Celestial Circle
  • Ambassador Circle
  • Kite and Key Circle
  • Franklin Fellows
  • Inventors Circle

Colonial Williamsburg’s Donor Societies

  • Duke of Gloucester Society
  • Capitol Society
  • Colonial Williamsburg Assembly
  • Colonial Williamsburg Burgesses
  • Colonial Williamsburg Associates
  • Raleigh Tavern Society

The Kimmel Center’s Founders Circle

  • Partner
  • Benefactor
  • Artists Circle
  • Leadership Circle
  • Presidents Circle
  • Chairmans Circle

Go Forth and Name Ye Levels!

I hope this post has given you some direction as you brainstorm level names for your new or existing membership site. If you have a type of membership site that wasn’t covered, post a comment below so we can discuss some level naming conventions for your site.

If you run an existing membership site, you can still rename your membership levels. With Paid Memberships Pro you can simply update the level names under Memberships > Edit Level in the admin. Every member that currently has that membership level will automatically have their membership level name updated.

Time to Play

The Membership Level Names Playground below allows you to enter a desired membership level name and see how it will “read” within various plugin-generated phrases. These are the most common phrases your members will see, both on your site and in membership-related emails.

Test your level name against key phrases in Paid Memberships Pro.

Enter a level name to test:

You have selected the My Level Name membership level.
Shown on the membership checkout page.

Membership Level: My Level Name
Shown in most member communication emails and invoices.

Your My Level Name membership is now active.
Shown on the membership confirmation page.

If you have a level name that doesn’t pass the litmus test, don’t fret. Every phrase in Paid Memberships Pro can be “translated”, and I’m not just talking about languages.

Our blog has several posts on renaming key terms within the plugin, such as this post about replacing the word “Membership” with “Subscription”.

Depending on your membership site, you may need to use these methods or another approach. Just open a topic in our members forum (provided to PMPro Core and Plus members), and we will help you work out any hiccups between your desired membership level name and the built in phrases of Paid Memberships Pro.

PMPro Update 1.9.1

Version 1.9.1 of Paid Memberships Pro is out with a handful of bug fixes and some tweaks to our license nag. This fix in particular will help on sites that had multiple plugins using the Stripe API library.

Concerning Our License Prompts

The tweaks to our “license nag” (as we’ve named it) deserve a bit of explanation. Almost two years ago we launched our PMPro Plus membership here on the site, which includes access to our paid support forums but also allows you to use the WordPress dashboard to automatically update the plugins that we host on our own servers.

Since then, we’ve been selling PMPro Plus licenses on the site here, but we weren’t actually requiring a valid license to update the Plus addons.

There were relatively few people taking advantage of the lack of checks on our update server, so we didn’t bother to turn on the check. Now however, there are quite a few sites running PMPro with Plus licenses that try to update against our servers without valid licenses. We enabled the license check in v1.9 to encourage those sites to purchase a license (or alternatively download zip files from GitHub to update their addons).

We also added a “license nag” that pops up once a week in the WP dashboard if you don’t have a PMPro license key set. Our intention for this nag is to kindly suggest that sites using PMPro on a production site purchase a support license. These support licenses pay us to support our customers, but they also support the PMPro platform in general by giving us cashflow to pay our developers/etc. I know that as a user of open source software myself, often times the decision of which projects I support and which I don’t comes down to simply whether or not I was asked for support.

We are still committed to PMPro as an open source project first and foremost.

All of our code is GPLv2 and available for free on WordPress.org or GitHub.com. At the same time, we want to encourage users who are willing to pay to purchase licenses to help support themselves and the platform.

It’s hard to strike a balance between asking nicely and being annoying. We’re not there yet. The v1.9 update was both unclear and aggressive in how the license notification worked. We’ll continue to monitor things and consider other changes (maybe making it less than once per week for sites without a license), but in v1.9.1 we have made a couple of changes to the license nag:

  1. On new installs, we will wait 1 week before showing the nag at all. This gives new users time to discover our website on their own or to try out the plugin and deactivate it if they aren’t using it. We didn’t mean for the license notification to be so “in your face” when the plugin was activated.
  2. The “Invalid Key” message is no longer showing if you haven’t even tried to enter a key. The error message is also yellow vs. red to note it as a warning vs. an error.

We’re also working on updates to our pricing page and documentation on the site here to make it more clear who should purchase which license.


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.9.1 specifically here.

Change Log

The full list of updates is below.

  • BUG FIX: Fixed the code checking if the Stripe library is already loaded to compatability issues with other plugins bundling the Stripe API library.
  • BUG FIX: Cancel code now properly uses preg_replace when sanitizing the list of level ids to cancel.
  • FIX/ENHANCEMENT: Removed test/doc code from Stripe and Braintree libraries.
  • ENHANCEMENT: Now pausing the license nag for the first week of use and removed the “invalid” error if no key is being used.

Create a Plugin for Customizations to Your Membership Site

Many of our articles and code recipes include instructions to customize and add this code to your “active theme’s functions.php file” or “a custom plugin”. In addition, our support team may provide you with customizations to add to your site via the support forums.

This tutorial explains how to create and edit the custom plugin for all of your tweaks to Paid Memberships Pro and any Add Ons you are using.

First, figure out how to FTP into your Website

While many of our add ons can be installed directly via your WordPress Dashboard, the customizations plugin is one instance where knowing how to use FTP to “put” or “edit” files on your web server is very important.

Your web host should have provided you with FTP or SFTP credentials. To properly log in to your web server you will need the:

  • FTP (or SFTP) address
  • Username
  • Password
  • (possibly) a port number and root directory

If you don’t know how to use FTP, this guide on the WordPress Codex provides some background on FTP and options for FTP clients, you can also refer to your web host’s FAQs and guides.

Creating Your Customizations Plugin

While you could place code customizations in the functions.php file of your active theme (or child theme), we strongly recommend using the customization plugin method. The primary reason for using a plugin is so that your development team knows exactly WHERE the custom code is located as it relates to your Paid Memberships Pro setup. It also helps keep customizations separate of theme updates or changes (which can be lost when a theme update is performed).

So, here’s how to create the customizations plugin:

  1. Create a folder called pmpro-customizations in the wp-content/plugins folder of your site.
  2. Create a file called pmpro-customizations.php in the folder you just created.
  3. Edit the pmpro-customizations.php file and paste this block of code into the file:

    Plugin Name: PMPro Customizations
    Plugin URI: https://www.paidmembershipspro.com/wp/pmpro-customizations/
    Description: Customizations for Paid Memberships Pro
    Version: .1
    Author: Stranger Studios
    Author URI: http://www.strangerstudios.com
    //Now start placing your customization code below this line
  4. Add the code for the recipe you are doing at the bottom of pmpro-customizations.php.
  5. Save the File and upload the folder and file to your website via FTP.
  6. Navigate to ‘Plugins’ in your WordPress Dashboard and activate the PMPro Customizations plugin.

This Makes Me Nervous.

We understand that you may not be completely comfortable working “in the code”. Our support team can put minor code tweaks in place for you if you share FTP information in a private thread.

If you are updating the customizations on your own and an update to the customizations plugin completely breaks your site, don’t fret.

These steps should repair your site:

  1. Connect to your website via FTP and navigate to the wp-content/plugins folder.
  2. Rename the folder pmpro-customizations to anything else (I generally rename it to pmpro-customizations-off.
  3. Now, visit your site. WordPress will automatically deactivate the plugin and, in doing do, your site should be restored.
  4. You can then repair any broken code in the file and rename the folder to the original pmpro-customizations.
  5. Upload the updated file and reactivate the plugin via the ‘Plugins’ dashboard page.

Need to customize the appearance (CSS/stylesheet) of Paid Memberships Pro?

We have a separate guide that covers setting up CSS stylesheet for customizations to your Paid Memberships Pro-powered membership site.

View the PMPro Customizations Stylesheet Tutorial

Allow Authors to View Their Posts Regardless of Membership Level

If you have multiple authors on your membership site, this recipe will override the post’s membership requirements and always let the author view their content (ignoring their current or past membership level).

Remember you can set new members to the “author” role at membership checkout via the methods in this previous article.

This page requires a PMPro Core Account or higher.

Already have an account? Login Now »

New to this site? Register Now »

Offer Multiple Payment Methods to Increase Conversions

Appeal to the highest number of potential customers by offering credit card, PayPal and check/other payment methods at checkout.

This post covers our add ons that extend the checkout payment options and allow you to offer up to three unique payment methods.

But first, why should you offer multiple payment methods?

Ask 5 random friends how comfortable they are making purchases online and I promise you will receive a variety of responses:

  • the 100% “no fear” online shopper,
  • those that are “slightly concerned” buying things online, and finally…
  • the “highly reluctant to enter my credit card number anywhere” customer.

We know that this variety of comfort levels exist, so what can you do as an online merchant to appeal to the largest array of buyers?

You can offer multiple payment methods.

Offering PayPal as a Payment Method at Checkout

PayPal offers peace of mind to buyers that have concerns paying you directly.

PayPal gives consumers a layer of protection when making purchases online. They are a well known merchant with industry-leading security features beyond anything you can put in place for your own website. In addition, PayPal offers simple tools to allow consumers to manage who they have paid, communicate with issues about their purchases, cancel subscription payments linked to their account, and report fraudulent or unauthorized activity.

Our Add PayPal Express Add On adds PayPal as a payment method in addition to the primary payment gateway.

Offer PayPal as payment method at checkout

Note: to add the credit card and PayPal logos, follow the steps in this tutorial.

View the Add On Documentation

Add Check/Other Direct Payment Method at Checkout

When a majority of your target members fall into the “highly uncomfortable making purchases online” group, offering an offline payment method, such as mailing a check, can greatly improve conversions.

The “Pay by check” option is particularly important for “offline” membership groups or associations that are just getting started with an online system. In this case, some percentage of your members are already comfortable making payment by mail and wish to continue doing so. Moving to an online-only system can alienate the members who prefer the status quo (unless the overhead to do so is prohibitively expensive or labor-intensive).

Our Pay by Check Add On adds a “Pay by Check” method in addition to your primary gateway — and it doesn’t have to be a traditional “check” payment. Some sites use this add on to provide bank transfer instructions or to directly invoice members after checkout via other invoicing systems.

View the Add On Documentation

Want to offer Credit Card, PayPal and Check?

These add ons are all compatible, so you can activate and configure both the Add PayPal Express Add On and the Pay by Check Add On to offer three payment methods at checkout.

Note that if you are already using PayPal Website Payments Pro as the primary gateway, you will only need to install and activate the Pay by Check Add on to offer all three payment methods.

Now go give it a try!

These add ons are both simple to set up and will hopefully lead to a higher conversion rate (more $$$) for your membership program. Here are the links to the add on documentation pages for reference:

As always, if you are experiencing any issues with your payment methods or checkout page behavior, please post a topic on our members support forum.

Paid Memberships Pro v1.9: PHP 7+, GlotPress and Licensing

Version 1.9 of Paid Memberships Pro is out. This is a “major” update with a higher risk of issues during update than usual. We’re now supporting PHP 7+, offering simpler translations via GlotPress, and providing better usability for the Plus Add Ons update process.

Please make a backup of your website prior to updating. Continue reading for specific details about the features of v1.9.

Now Supporting PHP 7+.

In order to provide support for this newer, faster PHP version, we had to update some of the gateway libraries we bundle.

The latest versions of the Stripe and Braintree libraries remove support for lower versions of PHP (5.2, 5.4). Officially, Paid Memberships Pro will start to support only the latest version of PHP as well as the highest point release of the one previous version. For now, that means we will support PHP 7+ and PHP 5.6.30. Paid Memberships Pro may work on earlier versions of PHP and we’ll do our best to avoid breaking compatibility for the sake of it, but we will not focus on compatibility for outdated versions of PHP.

Usability Updates for Plus Add Ons and Licensing Improvements

Another important change is that we have recently updated our license server, which delivers automatic updates to PMPro Plus add ons, to actually check for a valid license key before serving the update.

In the past, we would allow sites to update PMPro Plus plugins that were already installed even if they had an expired license key or no license key at all. A change we made on our license server will now cause errors if you try to update a PMPro Plus addon without a valid license key. The PMPro 1.9 update has better error handling to make it clear when and why this is happening.

Steps to Access Your License Key:

  1. New Members: Purchase a PMPro Plus membership then access your key on your Membership Account page.
  2. Existing PMPro Plus Members: Access your key on your Membership Account page.
  3. Navigate to Settings > PMPro License on your WordPress site.
  4. Enter your License Key and Save.

Remember, You can use your license on multiple sites, but we recommend that you only use your license on sites that you personally manage.

Now Supporting GlotPress for Easier Translations

Version 1.9 updates the “text domain” of the plugin to be “paid-memberships-pro” instead of “pmpro” and includes other updates to enable “GlotPress” support.

There is a chance these updates will cause issues with translations before things get fully resolved. If you have issues with your translated PMPro site, please get in touch via the contact form and we will work with you to fix things. The GlotPress service runs on the WordPress.org website and we were not able to fully test all aspects of this new support without releasing the update. There may be point releases to fix any issues that have come up.

Updating the Plugin

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.9 specifically here.

The full list of updates is below.

  • BUG: Fixed issue with cancelling 2Checkout recurring subscriptions. Now using the payment_transaction_id to find/cancel the sale’s recurring subscription since no subscription_transaction_id is being saved.
  • BUG: Fixed issue where old membership levels were not listed correctly in the cancellation email. (Thanks, Mike from Migrating Eye)
  • BUG: Fixed issue where “custom trial” values were not saving for discount codes.
  • BUG: Fixed issue where checkouts were still processing even if there were errors with the discount code used.
  • BUG: Fixed bug where settings added via the pmpro_custom_advanced_settings were not being saved to DB unless they were prefixed with custom_.
  • BUG: Fixed other formatting issues with settings added via pmpro_custom_advanced_settings.
  • BUG: Fixed issue where the sendInvoiceEmail method of the email class was expecting $order->discount_code to be a string, but it was sometimes a discount code object. (Thanks, Bill Stoltz)
  • FEATURE: Added the pmpro_member shortcode. See the Paid Memberships Pro website for documentation.
  • ENHANCEMENT: Added pmpro_account_membership_expiration_text filter to filter the expiration text that shows ona user’s membership account page.
  • ENHANCEMENT: Updated our Stripe and Braintree libraries to use their latest versions. This update allows our gateway integrations to support PHP7 and also removes support for PHP 5.2 and 5.3.
  • ENHANCEMENT: The Braintree level compatibility check now also looks for a properly named plan.
  • ENHANCEMENT: Better error handling when trying to update plugins that update against the PMPro license server.
  • ENHANCEMENT: Improved Italian translation. (Thanks, Francesco Pezzotti)
  • ENHANCEMENT: Improved German tranlsation. (Thanks, Simon)
  • ENHANCEMENT: Added a Sweedish tranlsation. (Thanks, Mathias Persson)
  • ENHANCEMENT: Added a “Chinese/Cantonese (Hong Kong SAR China)” tranlsation. (Thanks, Kai Chan)

How to Respond to a Chargeback or Dispute

This post covers some methods to deal with chargebacks – when a member disputes their charge for membership.

In some cases, a chargeback is actually fraud, whether it is a stolen credit card or PayPal account login. What I’d like to talk about now is a misuse of chargebacks: when a member is grumpy or lying about payment fraud just to get their money back.

What are chargebacks and disputes?

A chargeback or payment dispute is when a customer denies the payment.

Even if you offer a refund policy, there will be some number of customers that decide to simply call their bank and initiate a dispute. This could be because of (actual) fraud, dissatisfaction with their purchase, or they are just a despicable person who got their goods and don’t want to pay for it.

Your merchant account or payment gateway will let you know that someone is disputing a payment. You will then have a window of time to respond to the dispute and “make your case” for why the chargeback is not valid. If the chargeback is not ruled in your favor, the value of the disputed transaction as well as a merchant or gateway-imposed “fee” will be deducted from your account. See Chargeback Fees by Gateway »

First, locate the user’s membership account and disputed order.

My first step when dealing with a chargeback is to locate the user’s membership information and get some background.

  1. Go to Memberships > Orders in the WordPress admin.
  2. Search for the disputed order using the gateway’s “transaction ID”, or the “Invoice ID” on the order.
  3. If you don’t have a transaction ID, you can try searching for the user by Name or Email Address (the data you get about a dispute varies by gateway).
  4. Open the user’s profile in a new tab.
  5. Open the disputed order in the current tab.

Now, be an investigator.

In most cases, a membership site is a “virtual product”. This makes disputing a chargeback a bit more difficult—how do you prove you delivered what they have purchased?

  • Search your email program to see if the user had communicated anything with you directly, either prior to purchase or after.
  • If your membership site has any engagement methods, such as a forum or comment forms, see if the user has participated in these things.
  • Do you have an email newsletter? If so, access the user’s record in the email marketing tool you use to see if they have opened your messages.

    That’s a pretty high engagement rate for someone who “hasn’t received” my product.
  • You can also use the Visits, Views and Logins Report under Memberships > Reports to present activity for the individual user. Have they been logged in and using your site?
  • Better yet, if you are using the Better Login, View, Visits Report, you will have even more data about the user’s activity on your site.

    Wow, sure looks like you have been using your membership?!

Was it actual fraud?

If your investigating makes you 99% sure it was a stolen payment method used for purchase, just accept the dispute. It stinks. You’ll pay a fee. But it was actually fraud, and you don’t really have any recourse for this case.

You can prevent some fraudulent charges using the methods outlined in this post.

It isn’t fraud – I want to fight this dispute!

If your investigating leads you to believe this person just wants their money back, you should respond to the dispute and make a case for why it isn’t a fraudulent purchase.

Before I begin the process of fighting a dispute, I always email the member directly. I’ll ask them to withdraw the dispute and communicate that I will refund their money [how-to].

This never works. Most often I get no reply. But occasionally, I’ll get a weird reply like “I just didn’t have enough money so I said this was fraud.” Luckily, you can use this in fighting your dispute, so even if they don’t withdraw their dispute, you’ve gotten some more ammunition to win your case.

Responding to a Dispute

The method to respond to a dispute varies by gateway, but in general you will be asked to write a statement and provide supporting documents about the purchase. In the case of a physical good, they will ask for proof of shipment (and you may even have proof of delivery depending on the shipment method).

For all other purchases (digital goods, downloads, access, subscriptions, etc.), proving that the charge was not fraudulent is a little more involved.

First, write a statement that clearly describes the situation:

This user purchased a membership that includes access to a private forum. The user participated in several discussions as well as personal email communication with me. Please refer to the included documents with proof of these interactions.

Additionally, I am including files that show all details this user entered when creating their membership. Their name and email address as communicated to me matches that on the dispute and the payment method used.

Then, take screenshots and create PDFs of EVERYTHING

The supporting documents I generally include are:

  • A PDF “print” of the user record in the WordPress dashboard.
  • A copy of the membership confirmation email I receive as admin when they made purchase.
  • Copies of any direct communication they made with me.
  • Copies of any proof of participation on my site (comments, forum replies, contact form submissions, etc.)
  • A copy of the email marketing service’s details about their email opens.
  • A copy of your refund policy, if offered, that would show they had another method to get their money back.

Now you wait.

After submitting your evidence, the payment gateway or merchant will communicate with the user’s bank to make your case. This can take anywhere from a week to two months.

I hope the dispute is sided in your favor!

In most cases, the seller will lose the dispute.

The person filing the dispute has far more protections in place than you. And in most cases they are being defended by a credit card company fully motivated to make them happy. Even when your payment gateway does their part in presenting your evidence, more often then not the seller will lose the dispute, pay the fee, and have the funds returned to the buyer.

There is some comfort in knowing that you did your best to provide honest information about the charge and to defend yourself from this type of abuse. I’m sorry you didn’t win.

What’s next?

When you lose a dispute, make sure you remove the membership level for the user. And if you are feeling particularly upset about it, you can use one of these methods to block users from logging in, selecting or changing membership.

You can even write them a really nasty email. Just don’t send it. Just go read Jason’s post on dealing with hate.

Dealing with Haters and the Stress They Cause

Entrepreneurship is hard. To run a successful business takes knowledge, skill, and money. It also takes a certain kind of personality to persist through the innumerable issues many entrepreneurs struggle with. Some business owners struggle financial risks, competition, failures, and more failures. Some struggle with the responsibility of providing for one’s family and employee’s families.

There’s one more thing many business owners struggle with: hate. No one was talking much about this, but as our business grew, I found I was unprepared to deal with the increasing amount of hate mail and negative interactions happening online around our company and products.

I thought I was coping well, but in reality the stress was getting to me. Work wasn’t fun anymore, and the stress was bleeding into my personal life. I found myself more angry and quick tempered around my wife and kids.

I’m not alone. In conversations with other entrepreneurs, this topic of dealing with hate mail and negative communications often comes up. I notice some people are avoiding certain business models or business opportunities all together for fear of becoming a target of hate. Our community needed tools and support to deal with the hate that is a natural part of doing business with large numbers of people. Below I’ll share some of things I’ve put into practice to deal with hate and the stress it causes.

What are some things you do that can invite hate?


Getting hate? That’s a good indicator that you are working on something that people are passionate about. Because anything worth doing is going to upset someone.

At this time, there are over 50,000 websites running Paid Memberships Pro. The 80/20 rule we use to decide on features is only going to satisfy… wait for it… 80% of them. There will always be features that some users believe are the “most important” features. Even if we provide addons or code gists to account for a certain feature, some will feel the feature should be included in the core plugin, or easier to find, or set to a different default.

You can’t help everyone.

When we were doing consulting work with about 30 clients per year, if a client needed our help with something, we could find a way to help them. We’d work a weekend, stay up late, call in a favor. Now with 50,000 users and 5,000 customers, we can’t possibly help everyone as much as they need. We get dozens of emails every day, and within those emails are plenty of people we have the ability to help but we just don’t have the time. We do the best within the services we offer and try to point them in the right direction to get help from our partners or others, but some of these people are going to get upset.

And some of these users, customers, and potential customers are going to be so upset that they’ll post negative reviews, email us mean things, or even threaten us with legal, financial, or physical harm.

What are some things you do that can prevent hate?

Before I cover a few tips about how to handle hate that comes your way, let me first share a few tips on how to avoid some of the hate.

  1. Offer a 100%, no questions, money-back guarantee.
  2. Process refunds quickly.
  3. Manage expectations in your copywriting.

I cover these topics a bit more in our posts About Refunds and Our 100% Money-back Guarantee and Great Advice for Decreasing Refund Rates.

Managing expectations is hard. There is a fine line between managing expectations and talking people out of buying your product. One thing you definitely can do is keep expectations in mind when processing a negative review or email. Could you have realistically prevented this hate mail without negatively impacting your other customers or revenue.

Dealing with Hate You Can’t Prevent

Here are some general steps I take whenever dealing with an emotionally charged email, review, or support request.

  1. Look for constructive criticism.
  2. Write a first draft. Delete it.
  3. Put yourself in hater shoes.
  4. Reply professionally.

Look for constructive criticism.

Even the most hateful of emails and reviews can be parsed for constructive criticism. The messenger may be a complete douchebag, but it’s still okay to learn from it. Maybe there is a bug to fix. Maybe you could update your documentation to make something more clear. Maybe you could update your sales copy to fix expectations.

Don’t like feel you have to take Mr. or Mrs. Hateful’s advice just because they are screaming. Be counscious whenever the “squeaky wheel” is getting the grease. Ideas you parse from negative feedback might be a good or bad. Process it like you would any other feedback.

Write a first draft. Delete it.

Open a blank notepad (that you can’t accidentally submit) to write your reply. The first draft should just be livid and dig into how much of a loser this person is for wasting your time… etc etc. Then delete it. Maybe others won’t need to unload like this, but I find it helps me a lot. It makes it much easier then to step back and address the message objectively.

Put yourself in hater shoes.

Your first response is going to be to lash back or get defensive. That’s why you delete your first draft. After that, take a moment to try to understand why the person is so upset. Some people are just rotten and evil, but maybe they are just having a really bad day. Until proven otherwise, give the user the benefit of the doubt.

One thing that opened my eyes a lot with regards to the hate mail we get is when I realized that we are selling more than just payment software. In a lot of ways we are selling a dream. People dream of using our software to make money, start a business, quit their day job, or to grow their associations in order to push forward their goals of social change. Heavy stuff. They spend hours or days trying to set up Paid Memberships Pro, run into problems, and then reach out to us… just to have to wait a few days for a response or be told they need to spend money they weren’t ready to spend. It is frustrating.

I also think about the “professional hagglers” who’ve been trained by bad customer service over the years to believe that loud threats are the best way to get someone’s attention. Sometimes “flipping the script” on these folks and treating them like human beings goes a long way to calming them down enough so you can help in the way you are willing to help.

Reply professionally.

No matter how irate the original message is, make sure that your reply is controlled and professional. With public posts in particular you will want to address the underlying concerns and issues behind the message. Even if it’s likely the poster has moved on (or you want to encourage them very much to move on), reply for the sake of anyone else who might stumble upon the post. Always reply to bad reviews or comments.The public will see a very irrational negative post, followed by your very rational reply. If your average reviews and publicity are generally positive, your replies will temper the occasional negative post.

Dealing with Stress

So now you might know how to pull useful feedback out of a hateful email. You’ve learned some tips for avoiding some of the hate mail. And you’ve learned a rough system for handling and replying to the hate mail. Even if you try your best to do this with robotic repetition, reading hateful words with your morning coffee is a bad way to start the day. You’re likely to get defensive and experience a nice little rush of adrenaline that could set you off balance for the rest of the day.

In addition to the typical stresses of running a business, as far as my mind and body are concerned I’ve been doing the equivalent of a hostage negotiation 2 to 3 times a week for the past few years. Here are some things I do to manage the stress:

  1. Mediate
  2. Isolate
  3. Use the Buddy System
  4. Engage Happy Customers


I’m not a prolific mediator, but even 5 minutes of calm mindfulness every other day or so (I use the calm.com app) gives me a kind of super power. When I started meditating regularly I became better able to slow down, to recognize my natural emotional reactions as just emotions that will pass, and to step outside of myself a little bit so I could process hate mail and negative comments without taking it personally.

Meditating has also helped me in my personal life. Regular meditation helps to curb your knee jerk reactions when managing unruly kids, and it helps in the same way with unruly users and customers.


I try not to read contact form email while I’m still getting your kids ready for school. I don’t check the WordPress.org reviews before a meeting or a coding session. In general, I make sure I’m ready whenever I wade into the inboxes and forums where hate lurks.

After dealing with support or another piece of stressful work, I try to have a buffer before I move onto anything else in life. I’ll take a walk, play a quick video game, or meditate for 5 minutes or so.

Use the Buddy System.

For a while, I had been shielding Kim from the worst of the communications coming into our business. As I started to struggle with things, I handed contact form duties off to her. She started to process the wide range of email coming in, from good-natured questions, to slightly annoying requests, to the full on hate mail. A week or so in, she looked at me with a horrified face like “you’ve been dealing with this all along?”

We have a larger support team now, and most of them bear the incoming hate at some level. The worst cases still get escalated to me, but since the smaller issues are handled by my team I’m in a better state when I work on the cases I do address.

Our team chat is now also a place we can use to vent, get stuff off our chest, and just generally laugh at how surreal customer support can be.

If you don’t have a team of your own, you can search for other business owners going through the same thing. The Supporting WordPress Products Facebook Group is a great example of a place where business owners come together to help each other through sharing advice and also just being there to listen.

Engage Happy Customers

Unhappy customers are going to be so much more likely to post something in public than customers that don’t run into issues. Every once in a while, and also as part of some of our automated reminders, we try to prompt happy customers to post a review or testimonial. We will often follow up to successfully closed tickets with a request to share an honest review of our plugin on the wordpress.org repository. And every once in a while, we make an ask to our mailing list for folks to write reviews and testimonials. We get a lot of positive feedback from these asks, and the positive reviews on wordpress.org help to diminish the 1 star reviews there. (For each 1 star review we get, we need 3 five star reviews to maintain a 4+ star rating.)

Besides getting some nice things written about us and helping with Internet points, reaching out to happy customers also reminds us why we’re doing this. It feels good to engage with people who are benefiting from our hard work.

In Summary

The amount of hate you have to deal with day to day will scale with the size of your business, and you may not be ready for it.

There are some things you can do to avoid some of the hate, like 100% money-back guarantees and clear copywriting. However, you won’t be able to stop it all.

When hate comes in, look for constructive criticism, discard your first drafts, try to empathize, and reply professionally.

To help with the stress of dealing with this hate, meditate, isolate, use the buddy system, and engage with happy customers.

These kinds of posts are difficult for me, because I fear what our own unhappy customers will think of this. I’m ready for it. But I do hope that my experience here is useful to other businesses working to keep their customers as happy as possible while also staying sane and productive.

Let me know if you have any thoughts or tips with regards to dealing with negativity with your customers.