I decided to create a website for the members of my organization, a speakers association.  I wanted the site to be for the members, not just a site that the members would join.

Why would this be necessary?  What I’ve found is that even though it’s extremely easy to create a WordPress site, there are some intrinsic problems that every techno-phobe faces.

First, the mere installation process, no matter how simple, is enough to cause paralysis.  The second is the pressure of maintaining (and updating) an entire site by oneself.  And finally, adding advanced features, like podcasting, is too daunting for many.

I thought WordPress could be reduced to the extreme basics for the members, and they can all contribute to the site, and leverage off it’s success.  I describe how I did this, and the features I included in this post.

Let’s start with the intentions of my effort, and then I’ll proceed to describe how I completed the project (including the pitfalls I faced) all with the free, opensource application WordPress.  If you’re modestly technical, you can probably replicate what I’ve created.

The site is for a speaking association.  Most of the members of this group are starting their own business, but don’t have the resources to run their own web page.  For those of us who understand technology and blogging, that might sound ridiculous.  Unfortunately, the reality is that even the smallest hurdle is enough to prevent many from having a web presence.

I have my own site (which your at right now), and I even have a difficult time committing to maintaining it.  I haven’t updated my podcast in over a month, and sometimes I’m moving so fast, I don’t have time to write a new post.  By creating this member site, all the members could contribute to the posts – and since the subject is professional speaking, they could all leverage off each others articles.  If each member writes one post every two months, there would be on average a new post each day.

I wanted this to be different from a news site in that I didn’t want the necessity of an editor that was responsible for the content (even though the admin does have final approval to weed out profanity and such).  I also wanted the site to provide a special page for each member.  They could then use that page as their primary web presence.  What makes this different then a Yahoo Groups or wordpress.com account is that all the members have something in common – the speaking association.  There are 40 Chapters in my association, and I wanted each Chapter to have the ability to manage their own Page to promote their efforts, and to create additional pages if they needed.

The site needed to be easy to use for the members.  I worked on the presumption that a member could type an email, and that was about it.  WordPress has a fairly simple user interface as it is, but it still has way too many options for some folks.   Finally, I also wanted to provide special pages that only members could see – like help pages – but I didn’t want the general public to see those pages.

Here’s how I did it (and I’m very happy with the results).  We’ll forgoe the Theme choice, because as far as that goes, it was mainly tied to visual preference.  I did have to find a Theme that supported dynamic sidebars though.  If you want to see the site before you go on, it’s www.nsaprotrack.com

Start with the registration.  I made sure a registration link was on the front page (sidebar).  I didn’t want to have to explain to the users that they had to go to a special place (domain.com/wp-admin) to log in.  Instead, I just used the plugin Sidebar Login.  Nothing fancy, just a simple login on the sidebar that keeps the members focussed on the site.  It even has the little registration link, and “forgot password” too.

I set new users as “subscribers”.  This allowed me a delay where I could set up their personal page, and send them an email on how to update it.  I used the plugin WP User Manager to add extra fields.  I wanted to collect three extra pieces of information during the registration process.  This pluggin allowed me to identify what fields needed to collected during registration, and I was even able to create a drop down list to direct their inputs.

After the member subscribed, I changed their role to “Author”.  I used the plugin Role Manager to modify the permissions of the Author role.  This took alot of time of trial and error, because I didn’t find any good documentation on exactly how each role affected things.  Here are the permissions my Author now has:

  • Hide Dashboard (see below)
  • Read
  • Read Private Pages
  • Upload Files
  • Edit Posts
  • Read Private Posts

These permissions allow the member to write posts, but they can’t edit something that’s been published.  They can save their work in unpublished mode, and continue to re-login to edit the post.  Once their finished, they have an option to “Submit for Review”, at which point, an admin would have to publish it.  The member can only edit unpublished posts that they are the author of.  If they want to change a post, they’d have to ask an admin to “unpublish” that post, and then they can edit it.  The Hide Dashboard permission is tied to the IWG Hide Dashboard plugin.  This plugin removes the dashboard from whoever is assigned the permission to “Hide Dashboard”.  I thought the dashboard was too confusing for my members to deal with, so I just got rid of it for them.  The one hangup I had was that you have to manually create a new capability called “Hide Dashboard” for this pluggin to show it in the Roles section.

Here’s where I started doing some tricky stuff.  I needed a page for each member, but didn’t want to have to give the member the ability to manage pages.  I thought about just using the bio that the user creates in their profile, but that was way too limiting – I wanted the page to be theirs to play with.  Here’s how I solved it:  when a member joins, I create a post on their behalf, and assign it to a category I created called “Member Profile”.  I leave it unpublished, so when they log in  (with their new role “Author”), they can edit this post.  I then used the plugin Advanced Category Excluder, and excluded the category “Member Profile” from Home, RSS Posts, RSS Comments.  Be excluding it from Home, the member profile posts don’t show up in the normal blog posts.  They, in a sense, become a third class page, separate from posts and pages.

I then had to figure out how to include a link to these pages in the site menu though.  I did this by using the sidebar list categories function to create my menus.  So I had a menu for the categories that werne’t member profiles, and then created a menu for the “Member Profile” category.  Here’s the code (I had to know the category ID for Member profiles to do this):

php wp_list_pages(’title_li=<h2>Site Menu</h2>&meta_key=display&metavalue=pages’) (I’ll explain this line later)
php wp_list_categories(’orderby=name&title_li=<h2>Posts by Category</h2>&exclude=4′)
php wp_list_categories(’orderby=name&title_li=<h2>Pro Track Speakers</h2>&include=4′
php wp_list_pages(’title_li=<h2>ProTrack Classes</h2>&meta_key=display&metavalue=protrack’) (I’ll explain this line later)

Notice that the value 4 is the id of the category “Member Profiles”.  That took me along time to figure out.  I was going to use a page for each member, but then I’d have to explain to the members the difference between a post and a page.  I felt like that alone was enough to just make the member profiles posts.  So the special menu item for “Pro Track Speakers” above basically is a special posts page of all posts in the category of “Member Profiles”.  The one thing I didn’t like is that the posts are organized by the date they were created, not name of the post (which is the name of the member).  Oh well, not too much of a big deal.

The next thing I added was the ability to see the member profile – the small bit of information they type about themselves.  I used the plugin Autor Exposed (and that’s the way it’s spelled).  This provides a link to the author’s name at the end of every post that pops up the author’s profile information when clicked.  I had a heck of a time getting this to work, and had to add the following code to the header.php before the </head> tag:

function toggleDiv(divid){
if(document.getElementById(divid).style.display == ‘none’){
document.getElementById(divid).style.display = ‘block’;
}else{
document.getElementById(divid).style.display = ‘none’;
}
}

Supposedly the Autor Exposed plugin was supposed to work wihout this, but I kept geting java errors.  Adding this code didn’t make the authors profile Pop Up, but instead expanded an area that shows the author’s profile.  Good enough, and met my requirements.

Controlling the Pages:  For pages, I wanted four types.

  1. Pages that would show up in the menu.  There would be a small set, specifically, Home, Posts, and List of Members
  2. Pages that would show up in a second menu that are dedicated to the Chapter Pages
  3. Pages that were available as sub pages for the various chapters of our organization.  These wouldn’t be in the menu, but could be accessed by anyone on the web.  I’d expect the Chapters to create links within their pages to these sub pages.
  4. Pages that were for members only – or Private Pages – but still showed up in some type of menu.

I controlled the first and second set by assigning a custom field (feature of WordPress) with a key of “display”, and a value of “pages” for the first group, and “protrack” for the second.  So when the code in the sidebar is executed, only those pages with that key are shown.  The two separate menus were created with this code:

php wp_list_pages(’title_li=<h2>Site Menu</h2>&meta_key=display&metavalue=pages‘)
php wp_list_pages(’title_li=<h2>ProTrack Classes</h2>&meta_key=display&metavalue=protrack‘)

.

The third set was easy to control – I just didn’t assign the meta key to them, and they don’t show up in the menu!

The final set was a little tricky for me.  WordPress by default excludes private pages from menus.  I found this code which shows the menu of private pages for a specific role type.  One limiting factor about this code is that you can only name one type of role (or so I think) in this code.  It was a bummer because I had three roles (admin, author, and contributor).  The contributor role is used for the chapter representatives, and they have the extra privelages to be able to create pages and submit for review.  It just dawned on me as I was writing this post that if I add a second call to the function, I can add the second role.  I tried a third call for admin, but that didn’t seem to work.  No biggy, these two worked great  – a menu of private pages for members only!

<?php echo private_menu(’page’, ‘author’); ?>
<?php echo private_menu(’page’, ‘contributor’); ?>

.

Almost there.  I mentioned earlier that one of the pages I wanted was a list of members.  How do you do this!  I had to use the pluggin Exec-PHP.  This plugin lets you execute PHP code in a page.  Before you can use it though, you have to modify the user settings of the account you’re loggin in as and turn off the visual editor.  Once I did this, I created a page called “List of Members, assigned the custom field with a key of “display” and a value of “pages”, and put this code in it:

php wp_list_authors(”hide_empty=0&show_fullname=1&optioncount=0&exclude_admin=1″)

.

You can reference the documentation on the wordpress.org site on this function, but basically it lists the members.  Any members that have a post that they authored is clickable.  When clicked, you go to a  page of all their posts (including their member profile).  Wallah.

Last thing – Podpress

Podpress – UUUUGGGGGHHHHH….. If you’ve used podpress on your site, you probably love it as much as I do.  I use Firefox, and have no issues.  I found out that IE 6 has a bug in it that doesn’t like PodPress.  Specifically, when you upgrade to Wordpress 2.6 or higher and install PodPress, the site crashes when you try and edit a post.  It even crashes with Firefox, but loading the plugin No Revisions stops Firefox from crashing.  THERE IS ABSOLUTELY NOTHING YOU CAN DO TO STOP IE6 FROM CRASHING!!!!!  I tried everything, and researched it to no end.  My only solution (and it works great) was to start all over from scratch, and install WordPress 5.2 2.5, then do all the stuff I noted above all over again.  You just can’t downgrade wordpress.  Too many database things going on.  I tried – it killed my site.  I was able to import my posts pretty well, but had to deal with re-establishing all the user accounts (20 of them).  If I would have started out with WordPress 5.2 2.5, I would have been fine.

The site works great.  Although it sounds like a bear to setup, once I was done, it’s relatively easy to maintain.  I found another member that shares admin roles with me.  Unfortunately, when a member submits a post for review, we’re not notified, so we have to check it daily.

Now members can create their own posts, create thier own podcasts, and have a custom page for themself.  They only need to know how to edit posts to use the system.  Perfect member focussed site!

But wait, there’s more – the Pièce de résistance

I registered the domain name, nsaprotrack.com, with google apps, and use google to manage the MX servers (or mail exchange servers).  This is a free service.  All members have the option of getting a custom email, for example, jcarrillo@nsaprotrack.com.  It can be set up as a simple forwarder, or a full fledged 7gig online storage email account.  Members can littearlly use this site as their entire professional web presense without spending a dime.

OK, I’m done (whewwww).  Hope you find something in this post interesting.  To be honest – I really wrote this post for myself …. internal documentaiton.  Hasta.