Yet another WordPress site with private members-only pages

Recently I had the opportunity to work with a favorite client on a private content section of his WordPress site targeting the real estate industry. While the amount of protected content is actually very small, there were some specific requirements/constraints for the registration process and membership management tools:

  • Dead simple account approval process that allows my client to vet new applicants quickly
  • Allows custom fields in the registration form
  • Has the ability to export the membership data to CSV, and import new member data
  • Robust enough for larger membership databases, 25,000+ members
  • The ability to email all members or groups of members about product updates and news

After trying a few membership plugins for WordPress and being less than happy with the lack of a built-in account approval process, we went another direction. I got a trial version of aMember Pro, standalone membership software that’s been around for years. At $179.95 it’s not the cheapest solution, but the more I tested it the more I was sure my client would approve – and he did.

aMember Setup

Setting up aMember took some time, but it was not terribly difficult. I did have to check in with tech support once or twice (they are fast and responsive, by the way), mostly about how to hide some sections in the registration form template related to payments and membership levels; we didn’t need them because there’s only one level and it’s free. Setting it to manually approve new members is straightforward – just tick a checkbox – and all system emails are editable.

Adding custom fields to the registration form also required a little tinkering in the template file to change the order of a few fields.

aMember is not pretty right out of the box, but it is quite ready for integrating with HTML and CSS styling. My client only needed to show one page from aMember – the registration form. Styling it to complement the WordPress site was very easy, and that was all that was required for this particular project.

The Registration Process

A potential member registers by clicking a link on my client’s New Members page. He or she is then taken to the aMember registration form, they fill it out and submit it, and they get a confirmation email that states that all applications are manually approved and they’ll be notified of the decision soon. My client also receives an email letting him know that there’s a new application in the pool.

Clicking a link in the email takes him to aMember’s admin site. After logging in he clicks on Not Approved Users to see who’s new there. He can quickly view an application – they need to verify company info per their terms of service – then approve/deny one or more new members. When they’re approved, they’ll get an email with their new login info (which they’ll use to login to WordPress with some help from a plugin I’ll talk about a little later).

One thing to note: there is no way to automatically email an applicant who’s not approved, but you can click their email address in the Not Approved Users table to be taken to an email form. Pasting a pre-written denial notice that uses aMember shortcodes is a quick way to handle denied applications and this was a small issue my client was willing to live with.

Controlling the Private Content

Now back to WordPress. We needed to have approved aMember members be able to login here and see protected content, which includes a marketing page and an order form. aMember offers a plugin for this, but after hunting around in the forums for a while I decided on the $67 commercial plugin amProtect because of the many recommendations for it.

This turned out to be very fortuitous for reasons I’ll go into in the last part of this post!

amProtect does the following:

  • Integrates aMember products (like a membership level) into WordPress
  • Allows you to protect content for each product (i.e. hide a page unless you have a membership of a certain level)
  • Protect specific parts of a page’s content instead of entire pages
  • Allows for drip content
  • Provides a login widget

amProtect was easy to install and set up. I used it to protect parts of two pages in WordPress in seconds and it worked perfectly.

The Last Piece of the Puzzle

Finally, we get to the Gravity Forms part. I love Gravity Forms, I’d recommend it for anything but the most basic of form needs. It’s $39 and worth every penny.

This is not technically part of the private content area setup, but it connects. Trust me.

We used GF to create the order form that lives on one of the private content pages. There’s a little bit of intro text that is viewable by any visitor, then we show the form for members registered through aMember.

Why we used GF:

  • Supports multi-page forms
  • Conditional content – specific content is displayed only when certain form inputs are chosen or filled in (GF has a subtle sliding animation for this using jQuery if you like)
  • Can hide the submit button until the TOS are agreed to via a checkbox
  • The ability to dynamically populate fields based on the logged-in user’s data
  • Looks nice out of the box, and CSS styling, where needed, was straightforward

GF has a very nice visual editor and setting up the 2-page form was pretty simple.

The Problem We Ran Into…

The problem came when the client requested we prefill a set of contact info fields based on the members’ aMember registration data.

Urk. We discovered that dynamically populating from the aMember database, which is totally separate from the WordPress one, was not going to work without some help. I contacted Ken Gary, the developer of amProtect (remember our plugin that allows aMember logins in WordPress?).

amProtect has the ability to dynamically populate fields from aMember in Contact Form 7, another popular WordPress form plugin. I told him my problem on a Friday morning, and we went back and forth with a few emails where he tried to give me some code snippets that would both pull in aMember data and also work with Gravity Forms’ syntax for dynamic population. No joy.

Ken seemed to be as intrigued by the problem as I was. He bought a copy of Gravity Forms and told me he’d be in touch.

Late that same night I got an email from Ken with a new version of amProtect – he’d spent part of the day revising his plugin to also pull in aMember fields in a way that Gravity Forms could understand. I installed it and went back into GF, and had no problems getting the contact info fields to populate with the user’s aMember registration data.

Ken Gary ROCKS. I highly recommend his amProtect plugin if you’re considering a WordPress/aMember site, plus he has a number of other aMember-related plugins available. I’m glad that our problem led to the opportunity for him to offer an upgraded plugin – having support for both Contact Form 7 and Gravity Forms is a big deal.

A Workable System

For this particular client’s requirements, the WordPress/aMember setup fit the bill well.

One of the reasons for the need to quickly approve/deny applicants manually comes from the client’s trade shows – it’s not uncommon for them to have several thousand registrations in a day, and aMember provided the simplest way for them to handle the influx while still maintaining control of the membership.

The ability to tie together aMember, WordPress and Gravity Forms is a big plus for this setup. I hope this post proves useful for you if you’re looking for info on building membership sites in WordPress. Let me know if it does.


  1. great post Debbie, I’ll be rolling this config for a similar site in the coming weeks! is it still working out for the client? Thanks for sharing your experiences on this project.

  2. Thanks.

    It is working out well for the client – if you need a special setup like this rather than going with something all-inclusive like a WP membership plugin, this works nicely.

  3. Awesome tips! We’re doing the same thing with the Formidable Pro and Capabilities plugin which does everything except hiding private content. We do that with a little code.

  4. Hi. Would aMember Professional work in a case where you have a some content for one group of subscribers (Group A), and different content for a second group of subscribers (Group B), and a set of subscribers that are in both groups? Is it also able to handle adding additional Groups which may or may not overlap on the content?
    Case: A sports team. Group A would be team members in year 1. Group B would be team members in year 2. Some team members from year 1 are still on the team, but there are new members. Group C would be team members for year 3. Again, some team members from year 1 and 2 are on the team. I want to be able to present content to each group individually, but team members that are in multiple groups would see content for all three groups.

    Hopefully that makes sense.

    Do you know if aMember supports this in WordPress?

  5. Honestly, I don’t know. It’s easy to restrict content based on a product ID, i.e. when a user buys something from your site like a software package, you can restrict content based on that product ID so that only those people who had bought it can see it. I’d suggest posting your question on the aMember forum.

    For what you’re doing, I’d probably check out Role Scoper. You can create Role Groups that might be Group A, Group B, Group C and then assign users to them individually so you might have one user who was in Group A only, and then others who were in Group A, B, and C. Then on pages you can restrict content by Role Group. I think it’d be worth installing to check it out at least.

    The big advantages of Role Scoper over some of the other smaller membership plugins are that it’s free, and that it automatically removes menu items that a logged-in user isn’t supposed to see. That is, you can create a navigation menu for your sidebar that contains ALL restricted content and when a user from Group A logs in, he/she will only see pages for Group A in the menu. I hope that helps a little.

  6. Digging up an old post here, but I am trying to achieve this exact same thing and running in to some issues. I want to run the user registration through Gravity Forms instead of aMember. I am trying to dynamically populate fields with data from a users logged in profile for testing and no luck. Could you provide any code snippets or input?


  7. Hi Danny,

    It’s been a while since I’ve done this – I started here (you may have to login to read this):

    I think this was the one that that helped the most:

    But I think the most useful thing would be to post your specifics in their forum… Sorry, that’s probably not a lot of help.

Leave a Reply

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