Before beginning, I want to mention that this post was inspired by Chris Lema’s series on WordPress membership plugins, especially his post on why many stand-alone membership plugins won’t work. If you are studying membership plugins for WordPress, Chris’s posts are a must-read.
What is the Purpose of a WordPress Membership Plugin?
The power and flexibility of WordPress is amazing. WordPress can be used as a simple blogging platform, to build basic websites, sell physical products or downloads, create discussion forums, and much more. A membership website is, in a nutshell, a website that charges for access to protected content. A membership plugin makes it possible to do this. There is no shortage of membership plugins for WordPress and this post is not intended to be a review of any of them. I will say that I have a lot of experience with WooThemes Groups/Subscriptions for WooCommerce and MemberPress. Both are great options for creating a membership website because they work well and integrate with the WordPress ecosystem (meaning they don’t create an entirely new application that sits on top of WordPress). I would certainly recommend either, depending on the situation. However, I want to explain why I think the best membership plugin for WordPress is actually NO membership plugin.
The Key Features of a Membership Plugin
To see why this idea makes sense, let’s take a look at what every membership plugin does at its core.
1. Protects Content
This is as basic as it gets. Since selling paid memberships (or free ones) is to grant access to protected content, we need a way to protect that content. A quality membership plugin should integrate with the standard WordPress user system and probably add some custom roles that will serve as the role a user must have in order to access the content.
2. Charge for Membership
Next, you will probably want a way to charge users before granting them the privelages they need to access the protected content. Therefore, you need a way to integrate your user-creation process with a payment gateway, such as PayPal or Stripe.
3. Recurring Payments
Selling memberships is a great way to earn recurring revenue because they are typically subscription services. This means that users are billed at regular time intervals to continue receiving access to the content. You will need a payment setup that not only covers charging for initial access, but also for continued access. If your membership website uses this subscription model, you will need a way to handle applying updated content restrictions when a user cancels (deny them access). A membership system should know when this happens and revoke the user’s access.
4. Protect Downloads
This feature will not apply for every membership website but a lot of membership websites are selling downloadable products as the content. If this is you, then you need a way to protect those downloads.
So How Does “No Membership Plugin” Help?
The reason I prefer to not use a membership plugin a lot of times is because the ones available pretty much lock you in to that specific system and, consequently, you become dependent on one plugin for your membership website/business. What I prefer to do is create my own membership system utilizing a few different plugins, depending on my needs. Each functionality requirement I listed above is something that can be done with a non-membership plugin. Therefore, we need to find the right plugins to put together a system that works for what we need and doesn’t contain a ton of features we don’t.
Now, how do we do that and what plugins do we need? I love experimenting with different plugins, seeing what works well together, and what lets me create practical applications that are useful for real users. Creating a membership website without a membership plugin was an interest of mine a while back so I read various blog posts and tested different plugins to see what could be achieved. To set up a membership website without a plugin dedicated for membership capabilities, here are the plugins that will do the job.
Gravity Forms
Back when I was researching how to create a membership website without a membership plugin, I was frying my brain thinking about ways Gravity Forms could be used given its immense power. Then I found this epic post on Gravity Wiz (a fantastic website with snippets and tutorials for extending Gravity Forms). This article, by Steve Henty, walks you through creating a basic membership website with Gravity Forms and Justin Tadlock’s Members plugin. This is where the real meat of our membership system will take place. In summary, Gravity Forms and Members let us do the following:
- Allow user registration (Gravity Forms)
- Charge for registration (Gravity Forms)
- Assign users to a specific WordPress role (Gravity Forms)
- Restrict premium content to logged in users with that role (Members)
As you should be able to see, the combination of Gravity Forms and Members takes care of every basic requirement we need for a membership website.
Protect Downloads
If you read through the Steve’s article on Gravity Wiz, you probably saw his recommendation of the PluginBuddy S3 URL plugin. This plugin will let us insert links to protected files stored on our Amazon S3 account. The download links are dynamically generated when a user clicks and will expire after a specified amount of time (preventing link sharing and/or hotlinking). Amazon S3 is a paid service but it’s very cheap ($0.03/GB per month as of this writing) and worth every penny…all three of them!
Wrapping Up
This post is in no way meant to discredit membership plugins or encourage you to drop your current membership plugin. If you have found one that works for you, you should definitely use it. There will be cases where a membership plugin is called for (I usually suggest MemberPress). This is simply a way to create a membership website without a dedicated membership plugin that may be overkill. Going this route when creating a membership website with WordPress will allow you to tailor the setup to include what you need/want and nothing you don’t. It’s also opens up the door for much easier customization because the plugins used (the components of the membership system) are very flexible and play well with others. If you decide to use this setup, please drop a comment to let me know how and your results. I’d love to know how it works for you.
Brad Emery says
I want to create a page that is user generated using a form, and then only editable if the user enters a password that they set when they fill in the form. I don’t want to register users. Is there any plugin that can help with this?
Ren Ventura says
Hi, Brad. Since you mentioned making the page “editable” only when the user enters the password, the process would be much different than if you only wanted the page to be “viewable” with a password. If I’m understanding correctly, there are no plugins available for this, at least to the best of my knowledge, as this seems like a not-so-typical requirement.
If you’re up for coding this, you could create the page on form submission, save the password as custom post meta (not post_password, as this will prevent viewing unless a password is provided), and create an edit link that displays an edit form when the password is entered (this will allow you to avoid creating users). However, you’d want to really consider security issues with this. I’d suggest creating users and mapping any edit capabilities to the page’s logged in user/owner.
Paul says
Hi Ren, thanks for this article, although I am not sure it solves my rather unique problem.
I am developing a site for a client that sells hypnosis audio tracks. He has 15 and wishes to offer them streamed to his customers with 3 subscription levels.
Basic: They get to choose 1 of the 15 tracks to stream as much as they want for as long as they are subscribed.
Advanced: They get to choose 3 of the 15 tracks to stream as much as they want for as long as they are subscribed.
Premium: They get access to all 15 tracks to stream as much as they want for as long as they are subscribed.
We want to set a minimum 3-month subscription to all plans.
ANY help on this is highly appreciated.
Ren Ventura says
Hi, Paul. This is definitely a more advanced setup. I don’t know how the tracks are stored or accessed, but, for simplicity, I’ll assume they’re a custom post type.
You’ll need a membership system that either offers user-defined access to specific posts, or one that is flexible enough to allow for custom development to achieve this. I’ve not heard of a plugin that let’s users select specific posts on which to base a membership, so my advice would be for a flexible membership plugin, such as Restrict Content Pro.
Depending on your requirements, you’ll likely need to customize the checkout/registration form to allow for selection of tracks, then save the user’s selections (perhaps as user meta), check the permissions on viewing, and remove permissions when appropriate. This is, of course, no walk in the park, but should be possible with a flexible plugin like RCP.
almin valyani says
Hello there Ren,
This is an extraordinary post. I will try it out on another multisite for specialists, collector.ac
Thinking about how to deal with email warnings (record to lapse, and so forth.).
Much obliged,
almin
K Woodberry says
Thank you so much for this! I have set something up this way, but am now stumped at how we manage RENEWALS on our memberships.
Can you speak to how the forms/views should be set up to lend themselves to be renewed once each year (user access to protected pages expires and we can easily determine who we need to contact for renewal)? Thank you!
Ren says
Hi, K. This is an excellent question, and one that should be addressed. The tutorial itself covers an “MVP” membership setup, so to speak. What you mention is certainly something most membership websites will need.
I’d have to research this, but here are some of my initial (developer-oriented) thoughts:
1. You’d need to save memberships in the database. This will likely call for creating a custom table to store the memberships when they are created. At a minimum, the data you’d want to save will include the user ID, transaction ID from payment gateway, subscription status, and an expiration/renewal date.
2. Set up webhooks with PayPal, or whatever payment gateway you’re using (assuming the gateway offers them). Webhooks will allow you to have
$_POST</code< requests sent to your website when certain events occur, such as renewal payments, subscription cancellations, etc. You'll need to create the logic to process these different requests, and update the subscription-data and user-privileges accordingly.
3. I'd also create some UI for subscribers to cancel their memberships. This provides a better user-experience. Your payment gateway should provide an API for sending this type of request.
All of this is probably a minimum. I know that's no easy task, but, depending on your personal needs, it may provide a more flexible solution than a commercial plugin. If that's too much to tackle, my top suggestion these days is Restrict Content Pro, followed by MemberPress.
Third Line Designs says
I have already bought and installed MemberPress membership plugin on my website.
At first, I have thought that I have made a mistake. Then, I have read that getting MemberPress is really no mistake. I just need to hire experts (on Fiverr website) to clean up the mess and finish my website.
I would keep MemberPress anyway. Paying $107.10 a year is not that bad anyway.
David Jaffee says
Hi. Can you link to the freelancer that you used? Was it WPdezi? There aren’t many on Fiverr that specialize in Memberpress.
I am in a similar situation and need help setting up Memberpress
John Crumpton says
Hi David, let me know if you still need help with memberpress. I’ve built a couple of memberpress websites.
Uzo says
Hi Ren, thanks for the article. However, I am a bit concerned about David’s comment above because you didn’t address it. Could you please address a solution for that or provide an update. Thank you. Anyway, I have another pressing concern related to Membership forms which I will e-mail you about.
Stratos Nikolaidis says
Hi Ren, great article! How do you manage the recurring payments with this approach?
Thank you in advance.
laura says
Hi,
I have Gravity Forms. I just bought Memberpress (within the last hour) on Beka Rice’s recommendation and how she shows it works. What I think will be great is that right on my site, they can cancel their subscription, freeze/suspend it, or upgrade it. That stood out to me. So, I’m going to give it a 14 day trial. I tried working with this or that plugin… but I could not find ones that stayed maintained plus really were right for what I wanted to do.
So, I’ll give it a try and let the world know if I keep it and put it on 4 of my sites upgrading to the unlimited. 🙂
Maybe others can do Gravity Forms and their own restrict and tie it all together in a cohesive way – depending on their needs – I didn’t… and they sold me well telling me this would be quick and easy. Quick and easy? This level complexity? For $99? Sold. (Well, that and Beka Rice’s recommendation and show of what it could do.) 🙂
It can do authorize.net plus stripe (and that other unmentionable gateway).
Thanks!
david says
Dead advice. PluginBuddy S3 URL plugin is not working with current wp and hasn’t been updated for 5 years.
Articles like this should be removed from the internet and not be allowed to waste people’s time.
Ren says
Haha. Thanks for the laugh.
Kaala says
I appreciate this article 🙂 Thanks for not wasting my time.
Ren says
Thank you, Kaala!
Sue says
He wasn’t kidding about the part that the plugin hasn’t been updated in 6 years. Is there an alternative plugin you recommend?
Annamarie says
Very helpful post. Thank you. As someone who has a developers license for GF I’ve wondered how and if to use it rather than a membership plug-in.
Ren says
It’s absolutely possible! It requires more development work but GF is a great solution for most things that require front end forms.
Tom Palmer says
Hi Ren,
This is a great post. I’m going to give it a try on a new multisite for artists, collector.ac
Wondering how to handle email notifications (account to expire, etc.).
Thanks,
Tom
Ren says
Hey, Tom. Handling emails like this would require some custom coding but it’s doable. You’d want to generate emails on certain actions and trigger them to send at certain times (i.e. expiration). This is one area that a dedicated plugin will help if you don’t want to get your hands dirty with code but, like always, you might be more limited in flexibility.
andrew says
Hello can you tell me if the ” PluginBuddy S3 URL plugin ” still works as when i look on wordpress it says it is not updated for 2 years, hope it does
also love the work on the site and the info for memberpress too , the code is handy
Ren says
Hi, Andrew. I’m glad you’re enjoying the site! 🙂
As far as I’m aware, the PluginBuddy S3 URL plugin still works. Sometimes you’ll see plugins that haven’t been updated in a while but that doesn’t necessarily mean that it’s unusable or abandoned. Many times, the plugin just works and doesn’t need updated. You can always test it locally, though, to make sure it works with everything you need it to.
Dave says
Hi Ren – I have a cleint that has a complex set of inputs for Member Registration (about 40 inputs).
With 3 member types to choose from, the only difference in each member type is the price based on role. Page level access stays the same. The next step is Members and Non-Members being able to register for a confernce – with Members getting a discount.
I was going to run Gravity + MemberPress.
Gravity for the complexity, and the conditional fields.
Memberpress to protect the page based on a tagged Category.
Are you saying I should just use Gravity + Members plugin for the page access.
Then use Gravity + Gravity User Registration Form Add-On for the Conference ?
Would love to hear your thoughts. Appreciate the article you’ve written.
Ren says
Hi Dave,
If the combination of Gravity Forms and MemberPress works for you, by all means go for it. I’m not advocating Gravity Forms + Members over any specific solution. This post was to explain, in general, that Gravity Forms + User Registration + Members provides a legitimate, flexible solution that can be built on.
Since it’s been some time since I last used MemberPress and it’s not something I ever tested, I’m not sure if you can use Gravity Forms to register new members. I’d guess that it’s probably not since payment handling and user permissions are completed by MemberPress functionality. This would be a good pre-sale question to ask MP, though. I’d be interested to know as well so if you find out, get back with me on it.
If you decide to explore using GF + User Registration + Members, you’ll need to plan out your permission levels w/ associated capabilities, register any custom user meta, write the necessary PHP code to restrict access, etc. You’ll also probably want a way for users to have their access permissions removed when their membership expires. This will obviously be a more complex process.