v1.8.9 of Paid Memberships Pro includes the new function pmpro_loadTemplate that we use when loading any of the plugin-generated pages or system-generated emails. Having a central function to load these templates makes it easier to add templates of your own or filter PMPro to load templates from a different location.

Overriding PMPro Page Templates

Paid Memberships Pro generates frontend page content via the shortcodes pmpro_account, pmpro_billing, pmpro_cancel, pmpro_checkout. pmpro_confirmation, pmpro_invoice, and pmpro_levels. If you cannot accomplish your customization needs via hooks and filters or a custom stylesheet/CSS and need finer control over the HTML code generated, then you might want to override the template files for these pages.

By default, Paid Memberships Pro will look in your active theme (and parent theme if applicable) for a directory named “paid-memberships-pro/pages”. You can then copy files from /wp-content/plugins/paid-memberships-pro/pages/ into that folder and tweak the files to your needs. PMPro will load your modified version of the template instead of the default one that is bundled with Paid Memberships Pro.

This way you can edit those files without breaking your changes when you upgrade Paid Memberships Pro later. There still made be additions or changes to our default templates that you will want to or need to change in your custom templates, but you’ll have less work to do than if you “hacked the core” PMPro plugin.

You can see the full documentation on using custom PMPro page templates here.

NEW: Loading Custom Page Templates From a Plugin Instead of Your Theme

Before PMPro v1.8.9, if you wanted to load a custom page template from somewhere outside your theme’s /paid-memberships-pro/ directory you had to create a separate filter and callback for each template you wanted to override. If you were editing multiple templates, you would have a lot of similar code filling up your customizations plugin.

Since v1.8.9, you can use the new pmpro_pages_custom_template_path filter to tell PMPro to check a specific directory for ALL page templates. If the template is found, it will be used. If it’s not found, PMPro will continue to look in the theme and default pages folder.

So if you have a plugin pmpro-customizations.php with a folder “pages” in it, you can tell PMPro to use templates from that pages folder using code like this:

Creating your own page templates.

If you are loading a template in a plugin or addon of your own, there are many ways to do that from PHP require() or include() functions, to the WordPress get_template_part() function.

Now if you are building a PMPro addon and want to allow users to be able to override your template by placing their own versions in the /paid-memberships-pro/pages/ directory of their theme, you can use pmpro_loadTemplate. Here is an example that will load your own template file. We’ll be updating our addons to work the same way.


Which emails can I modify?

Any of them. See the full list of system-generated emails here. The preferred way to edit the core email templates is through the Email Templates Admin Editor Addon.

NEW: Loading Custom Email Templates From a Plugin Instead of Your Theme

However, sometimes you need to programatically update email templates. Similar to filtering page templates, you can use the pmpro_email_custom_template_path filter like this:

You can also create your own email templates and load them using pmpro_loadTemplate(‘name’, NULL, ’email’); which will try to load email templates from /wp-content/themes/your-theme/paid-memberships-pro/email/name.html.

Note that we use “email” without an S for our email folder but “pages” with an S for the pages folder.

We’re going to be adding some extra helper functionality around creating new email templates and integrating them with the Email Templates Admin Editor so users can easily override the email templates your addons use. When we get that done, we’ll post to the blog here. In the meantime, we can help in the member forums.

WOW this is great! I’m working on an addon plugin now which will have a new email template and was wondering how best to include it with the Email Templates Admin Editor. Look forward to more.

I am trying to customize the Member Directory Add On profile page. I have tried putting the profile.php in both /my_theme_name/paid-memberships-pro/pages/ and /my_theme_name/pmpro-member-directory/templates/, but neither way seems to work.
Can you point me in the right direction?

Leave a Reply

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