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.

I would suggest that you sign up for the premium support membership.  At $59, it is a good value and this price gets you access to the support forum, priority email support, a code snippet library of customizations, and access to exclusive plugin extensions such as registration blacklist, user tracking, PayPal subscriptions, and more.

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

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:


  1. says

    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

    • says

      sounds like you haven’t set the plugin options to block ‘pages’ – the default install is just ‘posts’ – check your plugin settings.

      • says

        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!


    • says

      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?

  2. Hrishi says

    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?

    • says

      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.

  3. says

    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,


    • says

      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.

  4. Aurora says

    Hi Chad
    Two more questions from this nagging (but grateful) user of your excellent plugin. :)
    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?

    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.

    • says

      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.

  5. says

    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?



    • says

      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.

  6. Jack says

    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 ?


    • says

      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.

  7. jack says

    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?

  8. says

    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?


      • says

        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?

      • says

        Okay. I found two lines in the wp-members-register.php:

        case “register”:
        if( email_exists( $user_email ) ) { return “email”; exit(); }


        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?

        • michael says

          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.

          • says

            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.

  9. neil says

    Is there a way to turn a customer field into a file-uploader so members could upload an avatar/bio picture?

  10. Kevin says

    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?

  11. says

    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

    • says

      Not really sure what to tell you with that one… the error you are getting is from another plugin (members-list).

  12. Carl Anderson says


    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 Anderson says

        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 );
        } else {
        return “loginfailed”;

        } else {
        //login failed
        return “loginfailed”;

        } // end of login function

  13. Michael says

    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:


    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.

    • says

      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.

      • Michael says

        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!

  14. says


    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:

    Does anybody else have the same issue?

    • Leonard Chiu says

      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..

      • says

        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.

  15. says

    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


    • says

      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.

  16. olivia says

    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

    • olivia says

      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.

      • says

        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.

  17. says

    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,

    • says

      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.

  18. kamal says

    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

    • says

      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.”

  19. says

    How can I unblock multiple pages all at once?
    I have tons of pages to unblock, and doing each one separately will take hours!

    • says

      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.

  20. says

    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

    • Carl Anderson says

      Just put the short code [wp-members page=”register”] into your registration page

  21. says

    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?

    • says

      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!

      function possibly_redirect() {
      $thispage = $_SERVER[‘REQUEST_URI’];
      $register = site_url(‘/register’);
      if(strpos($thispage, ‘action=register’) !== FALSE) {

      • says

        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.

  22. says


    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.