Many of our articles and code recipes include instructions on how to “customize and add this code to a plugin for customizations”. In addition, our support team may provide you with customizations to add to your site via this method.

This tutorial explains two methods for adding custom code to adjust your membership site functionality: creating a custom plugin or using the Code Snippets plugin available for free in the WordPress repository.

But can’t I just edit my theme?

We strongly recommend using the customization plugin method for a variety of reasons. To be clear, the file functions.php within any theme or child theme performs like a plugin in that it can execute php code. While adding code to your active theme’s functions.php file is often quicker than building a plugin, the downside is that if you change or update your theme, you’ll lose the functionality that was built into that theme. Code in a plugin will persist.

In addition, the use of a customizations plugin or the Code Snippets interface helps your developers and our support team know exactly WHERE the custom code is located as it relates to your Paid Memberships Pro setup.

How to Copy and Paste Custom PHP Recipes

Before you begin using a custom recipe, please read through our documentation on how to safely copy and paste PHP recipes. This guide is useful for beginner to intermediate level WordPress users who may not be very familiar with PHP and code.

Read the Guide on Copying Custom PHP Recipes
  1. Create a Plugin for PMPro Customizations

    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

    • Option 1: Download a Blank Customizations Plugin
      1. Download the blank customizations plugin (.zip)
      2. Upload the .zip file via the Plugins > Add New > Upload page in your WordPress admin.
      3. Activate the plugin.
    • Option 2: Create a 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:
      4. Save the file.
      5. Upload the plugin via FTP to your website.
      6. Activate the plugin via the Plugins page of your WordPress Admin.

    Editing Your Customizations Plugin

    1. Connect to your web server via FTP.
    2. Navigate to the /wp-content/plugins/pmpro-customizations/ folder.
    3. Download the latest copy of the pmpro-customizations.php file.
    4. Open the file in your preferred editor.
    5. Add the code for the recipe or code shared via your support forum thread at the bottom of pmpro-customizations.php.
    6. Save the File and upload the folder and file to your website via FTP.

  2. Using the Code Snippets Plugin

    Code Snippets by Shea Bunge is available for free download in the plugin repository. This plugin provides a simple way to run PHP code snippets (or what we call “recipes”) on your site. It removes the need to add custom snippets to your theme theme’s functions.php file or use a separate plugin for PMPro Customizations.

    Download Code Snippets via

How to fix things if customizations break your site.

We understand that you may not be completely comfortable working “in the code”. 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
Tagged . Bookmark the . Last updated: . Titled

On the main login site (login to members area) it expects you to login as a registered user. But it has an area at the bottom for people to sign up if they are not. That link takes me somewhere I do not want to go, which unfortunately is not the new user registration page. How do I change the link destination?

Hello there,
I want to add a custom blood group drop-down option in membership checkout page for our NGO. Can you please share me the pmpro-customizations.php code, please.
Many Thanks!

Custom fields at checkout can be added using the Register Helper Add On. The field you would like is a “select” field: You can see the example code here for how to create your field: We provide support for up to 5 custom fields as part of members. As an NGO, please reach out and we can provide a reduced rate for membership.

How do I add Name, Address and Phone Number in this case?

First Name
Last Name
Address Line 1
Address Line 2

That’s 7 fields. Am I missing something here or are there non customised fields I can use that are standard for WordPress?

Here are some links to method to capture these fields. Address fields are not standard for WP but First and Last Name are part of the WP User object. See:

Billing Address is optionally captured at checkout depending on your gateway setup. If you want to always capture a billing address, see:

Hello guys, there are any possibilities to make the customisation use plugins or {mytheme}/paid-membership-pro to customisation admin pages? I’d like to custom few views from: paid-membership-pro/classes and I’ve tried your method. But I assume that the plugin ignore different folders than pages, so I’m looking for some advice how to custom that.

This article demonstrates how to add a custom report:

The admin pages of PMPro are not designed to be customizable like the frontend pages (you can’t replace them with your own template), but you can duplicate one of the core plugin admin pages, rename all the functions/class/etc. and add it to your own dashboard via a custom plugin. This will require an advanced developer, but we do have customers that have added their own custom dashboard pages with alternate views of the Members List or other admin pages as needed.

The Members list and Orders list both have hooks in place to add custom columns in various places as well.

I am trying to add a “City” text input field, and a “State” dropdown box to the the registration page, what is the code would enter into the plugin?

I have added the Customization plugin to my site, but there is no “edit” button when I activated the plugin. I tried using CSS to override the button code, but the PMPro button code CSS shows up behind the CSS I used to override the original code. How do I customize the .pmpro_btn, .pmpro_btn:link, .pmpro_content_message a, .pmpro_content_message a:link to fit the design of my site? I don’t understand why the original CSS from the PMPro plugin would continue to show up behind my custom CSS, that’s not typically how code works. Any help you can give me would be much appreciated.

If you post to our member support area we will be able to help you further with this adjustment. You may just need to find a wrapping class or div that you can use for your custom CSS to target the button more directly.

Hey Jason thanks for your reply!

One last thing though, could you just quickly address the 2nd and 3rd parts of the question…

What Im trying to do is create an upsell sequence, so once somebody buys a specific membership level, they are taken to a page that offers them an upgraded level -before- they are then taken to the confirmation page.

Thing is I have a few levels that I want this to happen for (pretty much all of them except the upgraded one they are being offered in the upsell), so…

What parts of the code need to be changed in order for me to get this functionality? Is it just the numbers in the “$confirmation_pages = array(1 => 2);” section, or are there other changes that need to be made to the code so it will work how I need it to? And do I have to create a different snippet for every level that I want to direct to a page that is different from the default confirmation page?

Hey guys,

I just got the my_pmpro_confirmation_redirect.php code from github and had some questions about it.

For starters I know nothing about coding, it honestly all looks like a bunch of jibberish to me but I need this functionality. So in an effort to keep it simple I got the code snippets plugin.

Thing is:

1. What part of the code do I actually use to create the snippet? Can you show me from where to where I should copy and paste into the “code” section of code snippets…


2. What parts of the code need to be changed? Is it just the numbers in the “$confirmation_pages = array(1 => 2);” section, or are there other changes that need to be made to the code so it will work how I need it to? Also does the “//change this use your membership level ids and page ids” stay or do I delete this?

3. I am creating numerous levels and want them to go to different confirmations, do I have to create a different snippet for every level that I want to direct to a page that is different from the default confirmation page?

Thanks in advance!

Hi there. Coding is tough. Even copying and pasting can go wrong if you accidentally include something you don’t need. So your question is valid.

I snipped the code out of your reply because it would mess with our formatting on the side. However, the answer is basically everything you pasted there should be pasted into the snippets plugin. Additionally, I don’t know how the specific snippets plugin works, but you might need to add the opening php tag (first line of the code on this page here on it’s own line at the top to designate the file as containing PHP code. That’s it.

If you have access to FTP and can do that, this is safer to do over FTP. You might be able to find a WordCamp or WordPress meetup near you to find a developer to help you really quick with this… or even someone on or craigslist to just do this bit of code for you for $5-$10. If you are a member here, we will help you with this in our support forums if you provide the info to access your site in a private reply.


Jason, for the benefit of readers who might read your reply and get the wrong idea, the latest version of the Code Snippets plugin [] actively tries to protect you from entering the opening php tag, which it doesn’t need.


I already create my plugin and I changed the levels.php file in order to have “Tipo de suscripción” instead of “Level” and “Precio” instead of “Price” and it works pretty well. Now I would like to modify or delete other sentences in English that appear in some pages on my website, but I don’t find them in any php file belonging the “pages” folder.

For example: I would like to delete the word “now” of the sentence “The price for membership is %s now” whic appers in the “checkout membership” page, but I can’t find this sentence in any php file inside the “page” folder.

I found the paid-memberships-pro-es_ES.po file in the “languages” folder which contains some of the sentences that I would like to modify (including the sentence that I used in the example above), but when I modify this file to use it in the plugin (even if I modify it in its original folder) no modification take place in my web site.

Could you please explain me how to do this modifications.

Thank you very much.

I love this plugin, and I have added a whole set of extra information to my registration form. However for some reason one field – title – is not being saved to the user record. Everything else works. The first two fields are shown below. Title does not work,Referral and first name do. They all look identical to me!

$fields = array();
$fields[] = new PMProRH_Field(
‘referral’, // input name, will also be used as meta key
‘text’, // type of field
‘label’ => ‘Referral Code’, // custom field label
‘profile’ => ‘only_admin’ // only show in profile for admins


$fields[] = new PMProRH_Field(
‘title’, // input name, will also be used as meta key
‘text’, // type of field
‘label’ => ‘Title’ , // custom field label
‘size’ => 10, // input size
‘class’ => ‘signup’, // custom class
‘profile’ => true, // show in user profile

$fields[] = new PMProRH_Field(
‘firstname’, // input name, will also be used as meta key
‘text’, // type of field
‘label’ => ‘First Name’ , // custom field label
‘size’ => 40, // input size
‘class’ => ‘signup’, // custom class
‘profile’ => true, // show in user profile
‘required’ => true, // make this field required


Editing the Title field from within the membership page does not work either, it does not save the change. Editing the User record does not save the change either.

all advice appreciated!

Try changing your the name of your field from “title” to “user_title”. The variable name title might cause issues since WP uses it for some other things. We try to avoid this kind of error, but might be missing something here.

Hi and thanks for all the inf here, its really helpful since i am kind of new to all of this. Is there anyway someone can provide the correct loing/out recipe for the plugin

thankyou in advance

For my New Logo design website PMP (Free) Works just fine for my membership process…However, I cannot add a few questions (Design Questionnaire) to ask those Signing Up For Membership “BEFORE” they get to the Billing/checkout page. I NEED THIS TO MAKE MY SITE COMPLETE…But cannot figure out “HOW” to do this.

I’d like to have the ability to “ADD” custom Info Fields to the Membership sign-up Process after someone selects a Type of Logo on my website prom a Pricing Table that’s linked to PMP (Free Version) Checkout memberships Level Page!!

However, I’ve added the “Paid Memberships Pro – Register Helper Add On”…but to no avail, I have NO IDEA where or how to use it…Or Edit it to add the fields I need To Ask a few Design based Questions to my Customers Signing up for Checkout with paypal or a credit/debit card. I’ve even created a Registration questionnaire in Contact Forms 7 (It Doesn’t Work Either Like It Should With PMP)…and I cannot figure out HOW to link it…Or Edit the membership sign up form in PMP!!! ; (

So my question is: Is there a Simple way to add the question Fields I need Customers To See to SUBMIT INFO before actually checking out? If So, Where Do I add them…Or How. Thanks Any help in the right Direction Would Help. I’m A DIY Type of guy….But a push in the right direction would be a blessing. Any Ideas? Thanks

Blessings-Don : )

Just replied to your message via our contact form. The Register Helper documentation can be read here:

We do not have a link between Contact Form 7 and storing the user’s entered data in their fields then referencing it in their membership account.

If you need help configuring Register Helper, we provide the code for up to 5 fields as part of PMPro Core or Plus membership. See

So I am still a bit new to this system and need a little help with adding some fields. For example I want to add a “file” field. I have created the customization plugin and saved it as mentioned. what I am not sure is what code and where to include that (meaning what file) it goes in. Any help would be appreciated 🙂

We can help you in the member forums. If you share the fields you need and your current customizations (through a site like we can make sure things are formatted well and get info from you to install the code “manually” for you.

If it helps, the answer to “what file”? Is to create a NEW file called pmpro-customizations.php. Place it in a folder called pmpro-customizations, then upload that folder to your site (via FTP) to wp-content/plugins/pmpro-customizations

I just tried this and can’t seem to figure out one issue:

Goal: Configure membership level to allow teachers to purchase blogs on signup using pmpro and the Network Site Helper plugins.


Completed the six steps above. created folder, file, add code etc …

60 => ‘membership_expiring_60’,
90 => ‘membership_expiring_90’, );

return $settings;

add_filter(‘pmproeewe_email_frequency_and_templates’, ‘eew2_alert_settings’, 10, 1);

trying to test different expiration periods with different templates. The code was supplied by Pmppro rep.

received: PHP Warning: call_user_func_array() expects parameter 1 to be a valid callback, function ‘eew2_alert_settings’ not found or invalid function name in /home/nycmidwi/public_html/wp-includes/plugin.php

I have added PMPro Customizations, but I don’t know how to make it work. I created it and then I activated it, is there something else I need to do to make it work?

This doesn’t seem to work when using Desktop Server from ServerPress? I’ve created a folder and file as suggested, but the plugin doesn’t appear in the list. I’ve followed the same instructions on a live website and the plugin appears. I’d like to test the plugin in a local development environment, but it doesn’t seem to like it. Or is it because my license only applies to the live site and not the development one?

As Aimee mentioned above….. Your example for using “level”=>array(1,2,3) does not work. All of the fields show up on all of the member levels 1-5 anyways.

$fields[] = new PMProRH_Field(
“FirmName”, // input name, will also be used as meta key
“text”, // type of field
“size”=>40, // input size
“class”=>”firm”, // custom class
“label”=>”Firm Name”,
“profile”=>true, // show in user profile
“required”=>true, // make this field required

I need to add a “Join a Team” field or “Create a Team” field and plugin. Would anyone be interested in undertaking this work as paid work?

I uploaded the code as specified in this post and when I go to my plugins there is no pmpro-customizations plugin. How long does it take to transfer the files. My FileZilla is showing that it all transferred just just fine in 1 second.

Is pmpro-customizations.php in the /wp-content/plugins/pmpro-customizations/ folder or /wp-content/plugins/? If it is, it should show up in your plugins list. If it doesn’t show up there, then either (a) your plugin header (the comment at the top of the file) is incorrect somehow or (b) you FTP’d the files to another site/host. Sometimes it can be confusing to figure out exactly which folder is running your site if you have several sites setup under the same account/etc.

We can help in the member forums if you can’t figure it out on your own.

Here is the folder order:
The file is pmpro-cutomizations.php with this code:
Tell PMPro to filter the_content a bit later.

This will sometimes fix issues where theme or plugin elements (e.g. videos)
are not being filtered by PMPro. Note that this sometimes will cause
some things (e.g. share links) to be filtered that you don’t want to be
filtered… and sometimes edits to the theme or a child theme are
required to get the desired effect.

Add this to your active theme’s fucntions.php or a custom plugin.
function my_init_change_pmpro_content_filter_priority()
remove_filter(‘the_content’, ‘pmpro_membership_content_filter’, 5);
add_filter(‘the_content’, ‘pmpro_membership_content_filter’, 15);
add_action(‘init’, ‘my_init_change_pmpro_content_filter_priority’);

Each time I copy and paste what I am told to copy and paste. I think it is correct.

I really need help, please.
I tried to make some customizations to PMpro.
Now I need to find out how can I change the word “Days” in “Membership expires in 14 Days (Sign up page).”
I have uploaded the .mo-file in danish, but the word “Days” remains in english instead of the danish word “dage”.
I have seached for hours, but don’t know where to look.

Did you write a custom Danish translation? If so, can you email your file to

Your can reply here with the correct translation for that phrase “Membership expires in 14 days” and we will troubleshoot.

Are you using any other plugins to customize the level cost text? Is this the level’s expiration or an expiration date trigged by a discount code?

Hi, I created this plugin and added the pmprorh_add_checkout_box() lines I previously had in my theme’s functions.php. But now it dies with a “PHP Fatal error: Call to undefined function pmprorh_add_checkout_box()”
how can I make sure this plugin loads after the Register Helper plugin?

Never mind – I renamed the folder and php file to “pmpro-zzcustomizations” and it seems to load after the other pmpro plugins now!

Hi Jason,

Really this plugin awesome :). I found this plugin from then I downloaded it. Its working perfectly. But I’m facing a problem. one more I install this pmpro-register-helper for register. User can register without choose plan or level. Actually I want that for now. But I don’t understand how can i do this. can anyone help me?


I’m trying to create a custom payment gateway but I need to add another currency too. I which to do this without having to edit PMPro core files. Any hints on how to go about this?

I am launching a site for a 501(c)(3) non-profit. One of the constraints the Board has stipulated is that there can be no mention of the word “membership” in the membership section (I know – ironic right?). Instead everything has to be “patron” & donation. I have been able to accomodate so far by revising all front-facing instances of the word “membership” to “patron”, etc, EXCEPT for the Membership Levels page (for me – the Patron Levels page) which is generated when a prospective patron selects a patron level package (i.e. a Membership Level). I think I tracked it down to the PMPro functions.php file and the pmpro_getLevelCost() function called there. I tried creating a custom plugin – which initiated just fine – and pasted a modified copy of the pmpro_getLevelCost() function into it. Of course, it throws and error because I am asking the function to fire off twice. I have a couple ideas on how to proceed, but thought I would put it out there to you folks to see what you think – perhaps you can suggest something.

The non-profit folks would also like me to modifiy the URL / permalinks to remove all instances of the word “membership” as well. This is a lower priority for me.

Any contribution will be very much appreciated.


Hi Jason. Is there any reason why using Code Snippets plugin ( and adding each recipe as a snippet wouldn’t work? I have used it successfully to add functions before (it’s good because you can switch themes without worrying about your functions.php). It’s also handy because you can activate/deactivate functions (snippets) independently to aid troubleshooting.

That looks really cool and I think that would be a good way to manage the code snippets we share on the site here. It is similar to what we suggest with the pmpro-customizations.php plugin, but you can add the code via the WP GUI instead of having to edit the plugin file directly.

Hi Trishacupra, I have created snippets in almost all of my codes to customize wordpress and to do things that existing plugins don’t have. so far, I don’t have any issue and quite satisfied with it. With code snippets, you can do almost everything you want. 🙂

Hi, I am currently using the PMPro Customization and I am very happy with this plugin. The only item I am figuring out at the moment is how to inject javascript into the pmpro customization, because I am looking at having a datepicker for my date fields.


I followed the instruction, used this code ( for the plugin and uploaded it. But for some reason it doesn´t show up in the plugin sections. I checked three times now, if I did anything wrong, but it´s basically just copy and paste. Do you now any common mistake that I could have made? It´s named correctly and in the right place – I really have no clue, why it doesn´t show up!?

You need to put the “header” information from the pmpro-customizations template above the code from that gist. So paste them together with the pmpro-customizations on top and make sure it’s in the /wp-content/plugins/ folder. If you need more help, post to our member forums and we’ll help you out.

Hi Jason,

Thank you for your reply. After checking everything a few more times and not finding any mistake, I just created folder and file again from scratch and for some reason now it works!?!?
I also sent an e-mail to your support over your contact form. Since the problem is already solved, please just ignore it.

Thank you!

I installed PM Pro, the helper plugin and created the pmpro-customizations.php as instructed. The custom fields show up fine on checkout and profile BUT it doesn’t save to database. Did I miss a step? Thanks.

Is there a way of making separate Customization Plugins (so I can de/activate parts of the customization in just one click) and still have it show up in the PMPro Addons List (not just the WordPress Plugin overview)?

All customizations can go into the same pmpro-customizations file core plugin file (pmpro-customizations.php). We have some add ons that function as separate plugins but for code recipes and defining certain global variables in conjunction with add on plugins, you just need a single pmpro-customizations plugin.

In that case, how would you tell the plugin to apply itself (for instance, if I add “company” field to checkout for businesses, but not individuals) only to one membership level, not all?

You can set a “level” property on Register Helper fields so they are only applied to specific levels. So e.g.

$fields[] = new PMProRH_Field(
“company”, // input name, will also be used as meta key
“text”, // type of field
“size”=>40, // input size
“class”=>”company”, // custom class
“profile”=>true, // show in user profile
“required”=>true, // make this field required
“levels”=>array(1,2,3) //only add this field to levels 1,2, and 3

Hi, Jason, I was sure there had to be a way! Here’s how I incorporated it, but there is no effect on the fields. Thoughts on where I went wrong?

//define the fields
$fields = array();
$fields[] = new PMProRH_Field(“Organization Name”, “text”, array(“size”=>40, “class”=>”Organization Name”, “profile”=>true, “required”=>true, “level”=>array(2)));
$fields[] = new PMProRH_Field(“Organization Email”, “text”, array(“size”=>40, “class”=>”Organization Email”, “profile”=>true, “required”=>false, “level”=>array(2)));
$fields[] = new PMProRH_Field(“Contact Name”, “text”, array(“size”=>40, “class”=>”Contact Name”, “profile”=>true, “required”=>true));
$fields[] = new PMProRH_Field(“Contact Email”, “text”, array(“size”=>40, “class”=>”Contact Email”, “profile”=>true, “required”=>true));

this looks very doable. 3 questions.
1. do custom plug ins slow down the speed of my site?
2. do I need to do anything to the custom plugin when a new version of the PaidMembership pro updates?
3. I want to use this new plugin you got but don’t want to require Last Name. Should I create a custom plug in and edit the code from OR just download this one and edit the code in there directly to NOT require last name?

thank you! love this help forum so far. great job!


Leave a Reply

For faster support related to issues on your specific site please open a ticket in our members support area.

Your email address will not be published. Required fields are marked *