WP-Members is a free plugin to make your WordPress® blog a membership driven site. Perfect for newsletters, private blogs, premium content sites, and more! The plugin restricts selected WP content to be viewable by registered site members. Unlike other registration plugins and WordPress® itself, it puts the registration process inline with your content (and thus your branded theme) instead of the native WP login page. WP-Members works “out-of-the-box” with no modifications to your theme, but it is fully scalable for those that want to customize the look and feel, or want to restrict only some content. It is a great tool for sites offering premium content to subscribers, and is adaptable to a variety of applications.
Download the plugin
The plugin is currently maintained at the WordPress Plugin Repository. You may always find the current production version there.
Support documents
The primary support documents I have created are the Quick Start Guide, a visual support document to get you started, and the Complete Users Guide, which documents all of the features of the plugin.
Tips and Tricks
- Customize the Stylesheet
- Loading Custom Stylesheets with wp_enqueue_style
- Customizing the Plugin with Pluggable Functions
- Display different menus based on login status
- Block content in a custom template
- Disable the WP admin bar
- Filter and Action Hooks
- Filter Hook Demos (some are free)
There is a difference between Posts and Pages in WordPress. If you use WP primarily as a CMS using pages for content, you should review this post:
Translation and Localization
If you are using WordPress in a language other than English, the plugin has been adapted for localization. A POT file and existing translation files are available.
Plugin Name
This plugin has been named WP-Members since its public introduction in 2006. Back then, it was the only plugin doing what it does. Since then, there have been some commercial plugins that have hijacked the name. I have released some statements with information regarding the name:
- Statement regarding the use of the name wp-Member by SmartMediaPro
- Statement regarding the use of the name WP-Members by Others


Hi Chad
I really like the look and feel of this plug-in. I am a WordPress novice and trying to get some things sorted for our Church web site. In default confifuration with the “Members Area URL” set to our Elders’ area I am trying to provide a facility where our Elders can get on line and review documents etc without having to email for copies etc. I have the pages set up and unless you know how to access them (or know that they are there) they appear to be hidden. But they do not require a login to access – one can do that from finding them on the URL line of the browser.
So how do I ensure that these Elders pages and any sub pages can be seucred except by login, and can I do that with a one size fits password for all.
Any suggestions
Thank you – much appreciated
Pastor Wayne
sounds like you haven’t set the plugin options to block ‘pages’ – the default install is just ‘posts’ – check your plugin settings.
Thanks Chad – just saw your response.
I am happy to say that I have nailed before reading your response, AND, yes you were correct. Had a few minutes today to more closely read the User Manual, and its up and running.
Thanks – this really does the job well!
Wayne
Hi I’m having trouble finding the code for WP-members plugins. Can you pls help me??
Thank you
It’s in the WordPress plugins folder. If you don’t know where/what this is, then it is probably a good indication that you should not be tinkering with it. What exactly are you looking for?
Hi, I’m trying to implement a website where the user will need to register/login before they download any file (specifically PDFs and images). I’ve been going over the documentation and features but is this possible with this plugin?
The plugin can protect the content containing download information, but it does not prevent someone from directly accessing the file if they know the location. To prevent that, I would suggest implementing some type of prevention method using .htaccess. An easier method would be to obfuscate the link, but that isn’t necessarily foolproof.
Hi Chad,
I am looking for a solution like yours and I have a few questions.
I want to make all posts in specific categories available only to subscribed (paid) members and all other categories available for free.
Alternatively, I could do it on a per post basis as is described in your docs.
I have read through your docs and could not determine if this was doable (lock down a category, leave others open to all)
I will be handling user registration and payment using Gravity Forms & a few Gravity Forms Add-Ons (Paypal Payments Standard & User Registration). Are there any known issues between Gravity Form and WP-Members?
My site(s) are all built using the StudioPress Genesis framework.
If I can use your solution, I will be happy to contribute
Thanks and cheers,
Gil
Currently, the plugin does not do any category differentiation… That’s not to say that it won’t in the future, but at present, it’s not an option to block one category and not another. You would have to set the default one way or the other and then manage individual posts that don’t fit that setting.
Not sure about Gravity Forms… While I don’t generally consider other plugins when furthering the development of the plugin, I can say that I try to operate as tightly within the WP construct. While that doesn’t guarantee compatibility, I think it gets as close as possible. Also, there are quite a few hooks in the plugin to help with this, and that number is growing with each new release.
Hi Chad
Two more questions from this nagging (but grateful) user of your excellent plugin.
1.
since there is no delete or reject mechanism in the profile page itself, I prefix ‘x-’ against their country so I could identify them in some way before deleting their details. But it is extremely cumbersome to delete them from WP users page individually. I reject roughly 40% of all applications and it takes up a lot of my time simply removing rejected ones from my ‘inactive’ list. I have some 400 rejected profiles that I’d like to delete right now but I know it is likely to take me at least 3 hours deleting one by one. Do you think there is a better way of doing this. Or if there isn’t yet, would this perhaps be something you would consider implementing in your next plugin update?
2.
I’m sorry this may sound like a dumb question to ask (me no techie). but perhaps you could advise. I have downloaded your 2.7.4 update which apparently helps me download entire database of users in one go but not sure how to upgrade this. Should I simply replace these files with the ones there using FTP (and would I loose any custom fields I had added in my registration form by doing so)? Thanks.
You can actually bulk delete from the WP Users > All Users list. On the second question, yes you have it right – you can FTP transfer the files. Technically, you should deactivate the plugin, FTP transfer the new files, then reactivate. If you do it that way, you should not lose any settings that you already have; BUT – even though this is a minor update, I have to always give the caveat that you (1) should always test any updates on a staging system prior to upgrading a production site and (2) you should ALWAYS have an up-to-date backup prior to your update.
Hi there,
The plugin has been working perfectly until possibly the last update. When people register for the site, complete the form and a message on the following window says:
Fatal error: Cannot redeclare class PHPMailer in /home/farthing/public_html/wordpress/wp-includes/class-phpmailer.php on line 43
Is there something I’m missing and can easily fix?
Thanks,
Mat
While the plugin does call WP’s wp_mail function for emailing, it doesn’t rewrite any of those, so I have no idea what would cause that error other than you might have some other plugin or function that creates a conflict by trying to redefine the phpmailer class.
Thanks for the simple yet powerful plugin. But why am I getting this login / Registration page jumbled up? The fields for Passw and First Name are not correctly placed next to their description. Can it be fixed, is it to do with CSS ?
Thanks
Yes, that is a css issue. To make the forms the most flexible, the layout is entirely css driven. You may have to do some tweaking to have things work with other styles that are loaded – your theme, other plugins, etc. The plugin is equipped to do this and in fact, I encourage users to only use the included styles as an example of what you can do – a starting point. You really should be customizing the entire stylesheet to give it a blended look with your theme.
If you look above on this page, there are some links to posts on how to customize the stylesheet. There are also two additional stylesheets included in the download that you can try out. So, there is lots to work with – and you can’t really break it. The only really important thing is to keep the location of your customized stylesheet outside of the plugin so that you don’t overwrite it when you upgrade.
Forgot to add the address -
http://diasporic.org/ope/invoices/membership
Hi,
I want to set up categories for posts that only select members can see. I will have thousands of offices each with their own private category based on their www or other login field.
Will wpmembers handle this?
Cheers,
J
probably not.
Hey Chad, thank you for the plugin. I think it’s exactly what we need. If I can find the solution to one problem.
Is it possible to limit registration based on username instead of email address? In other words, currently if I try to register a new user with an existing email address, it says “sorry, that email address already has an account.” And I see the logic of that. But I need to have people register who don’t have their own address (parents registering their kids, that kind of thing). Is that possible?
Thanks.
Dan – this might help: http://coffee2code.com/wp-plugins/allow-multiple-accounts/
Thanks, Michael. But I must be missing something. I installed that plugin and I’m still getting an error message when I try to register a new user with an existing email. If I disable wp-members and use the WP registration I am able to register the new user. But not with wp-members. What am I missing?
Okay. I found two lines in the wp-members-register.php:
case “register”:
if( email_exists( $user_email ) ) { return “email”; exit(); }
and
case “update”:
if( email_exists( $user_email ) ) { return “email”; exit; }
I commented out both of the if statements (leaving everything around them) and it seems to work fine now. But does that break anything?
Ah – this plug-in works directly with WP’s native log-in/register functions. So if you’re going to be using WPM for registrations instead, then you won’t really need it. I can’t see why your code alteration to WPM won’t work – although Chad may know better – but you will have to remember to repeat it with each upgrade of WPM, so, as with any code hack, it isn’t an ideal solution.
That change should work. However, there are a couple of caveats. 1st, as Michael mentioned, you’ll either need to repeat the process following an upgrade, or you could make a plugged version of the registration function (see: http://butlerblog.com/2011/11/29/customizing-wp-members-with-pluggable-functions/). If you do that (which actually would be the recommended approach), you’ll need to make sure that you monitor updates to make sure your plugged version remains compatible with the plugin. I will mention here that in the future it is likely that the registration function will be broken into at least two parts – data validation and data input (registration/update).
2nd and probably more importantly, while you can make such a change to allow for non-unique emails with the plugin’s registration in this way, that does not guarantee that you won’t run into problems with WordPress. WordPress as a default does not allow multiple accounts from single emails, so caveat emptor.
Is there a way to turn a customer field into a file-uploader so members could upload an avatar/bio picture?
Not at this time – that would take some significant customization. However, WP already has avatar capability built in, which WP-Members is compatible with. See: http://codex.wordpress.org/Using_Gravatars
Hi Chad,
I’m trying to export ALL members that signed up. I can only get it to export all users that are shown on the currently displayed page. To export the other users, I have to click on the 2nd page, 3rd page, etc. to export them. Is there a way I can select all and have every user exported at once?
You can get a list of all users that have not been exported by selecting that in the menu. That selection will not paginate and will export any users you haven’t previously exported.
The 2.7.4 release does include an export of the entire list (see: http://butlerblog.com/2012/04/03/wp-members-2-7-4-release-announcement/).
I’m having a problem with activating members with this program. It says the following:
Fatal error: Cannot use assign-op operators with overloaded objects nor string offsets in /home/idgaf/public_html/wp-content/plugins/members-list/class/xml.php(322) : eval()’d code on line 1
We have had this problem twice. Yet it randomly takes another member and will not activate them. How can we remedy the problem? Thanks
Mr. Smith Administrator 706-955-6385 Augusta, GA
Not really sure what to tell you with that one… the error you are getting is from another plugin (members-list).
Hi,
Thanks for the excellent plugin.
I am importing my current database of members into my new wordpress site using WP-Member.
Is it possible to allow users to login with email address + password?
The problem I have is that when I import I can set the username to some automatically generated string but the user will not know their username, hence unable to sign in.
At the moment on my current site they use email address and password to sign in?
I dont want to set their username to be email address because then they wont be able to update their username(email) and will get messy. Thoughts?
Carl
Well, the plugin is not really set up for that. However, depending on how adept you are with php, the wpmem_login function does happen to be a pluggable function, so you might be able to write something that would allow an email login. See: http://butlerblog.com/2011/11/29/customizing-wp-members-with-pluggable-functions/ for information on WP-Members pluggable functions.
Thanks for the reply. I seemed to have sorted it out pretty easy. For anyone else wanting to use email + password to login (instead of username + password) this is the code I changed in wp-members-core.php
function wpmem_login()
{
if( isset( $_POST['redirect_to'] ) ) {
$redirect_to = $_POST['redirect_to'];
} else {
$redirect_to = $_SERVER['PHP_SELF'];
}
$redirect_to = apply_filters( ‘wpmem_login_redirect’, $redirect_to );
if( isset( $_POST['rememberme'] ) == ‘forever’ ) {
$rememberme = true;
} else {
$rememberme = false;
}
if( $_POST['log'] && $_POST['pwd'] ) {
$user_login = sanitize_user( $_POST['log'] );
$creds = array();
$username = $user_login;
if ( !empty( $username ) )
$user = get_user_by( ‘email’, $username );
if ( isset( $user->user_login, $user ) )
$username = $user->user_login;
$creds['user_login'] = $username;
$creds['user_password'] = $_POST['pwd'];
$creds['remember'] = $rememberme;
$user = wp_signon( $creds, false );
if( ! is_wp_error( $user ) ) {
if( ! $using_cookie )
wp_setcookie( $username, $user_pass, false, ”, ”, $rememberme );
wp_redirect( $redirect_to );
exit();
} else {
return “loginfailed”;
}
} else {
//login failed
return “loginfailed”;
}
} // end of login function
endif;
I absolutely adore this plugin and would recommend it to any one.
Thanks for all the hard work
Can you please tell me, is there any redirect plugins that work with Wp-Members.
I’m trying to use Peter’s Redirect, here is the issue
If you open up the following file on your server wp-members/wp-members-dialogs.php and go to line # 794 you’ll see the input field:
‘;
This input field gets outputted on the login form on the homepage.
I noticed that the input field value was blank:
Now if you open up the following file on your server plugins/wp-members/wp-members-core.php and go to line # 367 – 370 you’ll see the following code:
$redirect_to = $_POST['redirect_to'];
if (!$redirect_to) {
$redirect_to = $_SERVER['PHP_SELF'];
}
This code is saying if the $_POST['redirect_to'] field is empty set the $redirect_to variable to $_SERVER['PHP_SELF'] which means redirect to the page you’re on.
The line of code that handles the redirect is on line # 386 in the same file:
wp_redirect($redirect_to);
This is why the “Peters Login Redirect” plugin isn’t working.
How can I remedy this issue, I would like different logged in users to go to specific pages,
any help would be greatly appreciate.
Hi Michael – thanks for your comments. There are redirect hooks in the plugin for both login and registration. These are outlined in the Users Guide above.
Thank you for the quick response, Chad. I am looking forward to researching the documents and look forward to inititiang the action to resolve. A five star plugin!
Hi,
I’ve just installed the plugin and was setting up the login/registration page and I have noticed that for the registration form the first label (choose username) has the ending p tag but not the opening one thus making the labels not aligned with the input field.
Here is the link where you can see what I am talking about:
http://worldwidehighschool.com/employment/philadelphia/
Does anybody else have the same issue?
http://wordpress.org/support/topic/plugin-wp-members-p-tag-not-closed-bug?replies=2
Yes I second this extra tag issue.
Been trying to correct it but being an amateur, I can see the same issue but can’t correct it.
Anton, look forward to any possible answers. Will revert here if i managed to find a solution
Chad, super job for the plugin…
Do you do custom works to this plugin? I am happy to email you my company’s requirement so that you can provide me a quote… Prefer the author’s work than hiring a local programmer..
Hi Leonard – as I indicated in the WP discussion linked above, the plugin does not put any p-tags in the form, so if you are getting them, they are coming from WP (or somewhere else). It is odd that you would be getting this because for the form output the plugin turns off WP’s native functions that put in p-tags and br-tags.
Oh, and regarding your question on custom work – yes, I am available for customization of the plugin. Feel free to contact me directly via the contact form on this site: http://butlerblog.com/contact
Hi there
I have run into a problem and I don’t know if its me or the plugin wont support what im looking for.
What i am trying to do is run the whole site as a blog with a static home page where any user can see any of the posted information. But on the members area page “visible threw the navigation menu” below all the information you see I have written about this members area I would like a sign up or log in form where new members can sign up or existing can log in, and then they ae directed to the members area where they can access some stuff I have to give my members.
my problem is Ive tried every setting in the plugin and it either throws a sign up or log in form on every page and shows none of my “Page written content” or it doesn’t show the forms at all. I have set a sign up page and set the url in the plugin just to that page and try to save it and get no results at all.
I do clear my cach and cookies after every change to make sure I am seeing what is actually happening so that’s a problem to exclude .
any way thanks for your help and the plugin it self
Mike
Mike – I’ve read this several times, and I’m still not really sure what you are trying to do. The Quick Start Guide outlines the basic install. The full Users Guide covers all of the features more in-depth. Hopefully you can find the answer to your problem.
Is there a way to import bulk users to WP Members?
agree, an import option would be great for wp-members
At this time, there is not, but I do have something in development. Just not sure when it will be completed and released into the wild.
Hi Neilson,
This did it for me. Quite easy to setup. It searches the wp_users table and if it doesnt find the column it adds to the user_meta. Basically if the column names are the same as the wp-member fields you have setup everything works great.
http://wordpress.org/extend/plugins/import-users-from-csv/
Hi Chad,
How are you doing? I installed the plugins and it is great, thank you. I have two questions please:
1) I would like to change the font size of the login form, how to do it please?
2) I know I can put the login status on the sidebar, however, is it possible to customize the position on the sidebar?
your help is greatly appreciate.
website: http://www.coffeebreakonly.com
Sorry, let me clarify a bit better for point #2:
I want to show the login status on the sidebar, however, I do not want to show the login form (when it was not login yet). is it possible? please advice.
Hi Olivia,
On your first question, please see the information posted above on this page about customizing the stylesheet. Most elements of the plugin’s output can be customized with CSS. As for the other, to show the user’s login status, you can call the function wpmem_login_status.
Hi there, thanks for your hadwork on this plug-in!
I have a non-profit agency that we use WP-Members to create a staff intranet – basically a couple pages of links, resources and forms. All is pretty easy, except for the forms. Is there a way to block forms or any uploaded file??
Thanks very much,
L
I think what you are getting at is that users already have an account or are created elsewhere so you want to keep this from having open registration? If that’s the case, simply turn off the registration option in the plugin’s settings.
i installed and activated successfully it. But after selecting post and page block, my posts and pages are not blocked by it. help me out
That could be a lot of things – from something technical like a plugin conflict, to simple like not following directions. Start by reviewing the plugin documentation linked above. There is a Quick Start Guide, a fully documented Users Guide, and a link to the FAQs (the first of which is titled “I activated the plugin and went to test it and it didn’t block my post.”
How can I unblock multiple pages all at once?
I have tons of pages to unblock, and doing each one separately will take hours!
Do you have significantly more to unblock that you have blocked? The process works the other way around as well. Set the plugin to unblock pages by default, then block the individual pages that need to be blocked.
Hello everybody.
I having trouble with WP-member plugin. And the problem is I cannot find that how add only registration form in any page of my website plz tell me how to do this. thanks
Just put the short code [wp-members page="register"] into your registration page
Hi Chad, great plugin! we have been using it successfully for a while now but recently we have noticed that users (they are legitimate) are creating accounts skipping this plugins nice registration page. after several hours of pulling my hair out I discovered it was our shopping cart plugin taking them to the wrong registration page. Now I know that is not your problem but i wonder is there a way to make the wpmember registration page the default and only way to register?
Chad I know this was not really directly related to your wonderful plugin but it was messing up it functionality for me. I found a solution put this snippet into the functions.php worked like a charm!
add_action(‘init’,'possibly_redirect’);
function possibly_redirect() {
$thispage = $_SERVER['REQUEST_URI'];
$register = site_url(‘/register’);
if(strpos($thispage, ‘action=register’) !== FALSE) {
wp_redirect($register);
exit();
}
}
Thanks for posting Bill. As soon as I read your first post, similar code came to mind as your explanation was good. But obviously before I got to comments today, you found your answer.
Hi,
First thank you a lot for your plugin. It’s very helpful. Here my problem: I’ve installed your plugin and parametrized it. It’s worked very well. After that I’ve created three new pages of articles (like the default one) fallowing this method (sorry it’s in french): http://zipion-live.be/2010/08/des-articles-sur-plusieurs-pages-sous-wordpress/
But now I can’t protect my pages. The fields for login doesn’t show anymore.
Have you got an idea for this, please?
Thank you.
This appears to be a method of creating a template to show categories, in which case, you can either be showing excerpts by making use of the ‘more’ tag (discussed in the users guide) or this post, although not exactly what you need, could give you some ideas: http://butlerblog.com/2011/10/04/blocking-content-in-a-custom-template/