This post is going to look at a quick way to turn a fresh install of WordPress 3.0 into a easy to use CMS for non-technical clients. It will utilise the new ‘Twenty Ten’ theme that already has some CMS leanings, the new custom menu feature, plus a couple of plug-ins that add some extra functionality.
UPDATE! since the release of version 3.1, WordPress now uses a slightly different template structure to the one described in this tutorial. A revised version of this post is available here
WordPress as a CMS is a debate that is waning now, I think. Each subsequent release adds more and more CMS-like features. However, WP still ‘defaults’ to a blog when first installed, and the emphasis in the admin area is very much about managing posts and comments, which can be confusing to those not familiar with its ways.
However WP can easily be converted for use as a basic CMS website, with all the SEO goodness of a dynamic ‘latest news’ area, and the superior (in my opinion) back end interface.
This tutorial assumes a familiarity with the WordPress admin interface, installing plug-ins, and messing around with PHP files on the server. You will also need a fresh install of WP 3.0 using the Twenty Ten theme.
Let’s get started!
1) Create Some Pages
The first thing to do is create some pages.
As you probably know, WP gives the author the option of creating either dynamic blog ‘posts’ that can work in several contexts and taxonomies, or ‘pages’, which behave much more like standard, fixed, web pages. Since we are interested in setting up a CMS, we will focus mostly on page creation.
For this tutorial we are going to use page titles of ‘Home’, ‘About’, ‘Staff’, ‘News’ and ‘Contact’:

Add some preliminary content to ‘Home’, ‘About’, ‘Staff’ and ‘Contact’, but leave ‘News’ blank, and disable comments on all of these pages.
2) Change The Permalink Structure
By default, WP creates silly URLs for pages such as ‘?page_id=3′. If we want the URLs of our pages to reflect their titles, which is much better for SEO and client understanding, we need to go to SETTINGS > PERMALINKS and insert:
/%postname%/
into the ‘Custom Structure’ field:

By doing this, the ‘About’ page will now have a URL of http://www.mysite/about, ‘News’ will have http://www.mysite/news, and so on.
3) Make the Home Page Static
By default, the ‘Home’ landing page will contain the main WordPress blog, with a reverse-chronological list of posts. To make the site less blog-like and more like a standard website, we will need to move the blog to the internal ‘News’ page, and make the landing page static.
To do this go to SETTINGS > READING and under the ‘Front Page Displays’ section, change the settings to how they appear below:

4) Create a Custom Menu
This feature is new to WP 3.0. Similar functionality is available for older versions using the My Page Order plug-in, but this gives us a few more options.
Go to APPEARANCE > MENUS
Type ‘Main Nav’ in the menu name field, then click on the blue ‘Create Menu’ button:

You can now add your pages to it:

and can arrange their order by dragging and dropping them into place:

A particularly good feature of this is the ability to nest pages within pages, which automatically generates a drop-down on the menu:


Infact, if we take a quick look at what we have got so far, we already have a fully-fledged standards compliant, SEO-friendly CMS site up and running, with editable fields for the content on our four main pages, a fully-functioning ‘latest news’ section, and a dynamically generated menu:

Yes, that sidebar needs removing but we’ll come to that in a bit.
5) Tweak the Admin Toolbar
The order of the tabs in the main admin toolbar don’t make a lot of sense to clients if they aren’t using WP as a blog. The focus is clearly on blogging, and the ‘Pages’ tab, which is most relevant for our purposes, appears fourth on the list:

There is a nifty plug-in called Admin Menu Editor by W-Shadow which can quickly resolve this. I tried once to manually edit the PHP files for the toolbar, it was very time-consuming, and was problematic when it came to upgrading. This method is much less of a headache, in my opinion.
Install the plug-in, go to its settings and move the ‘Pages’ tab to the top of the toolbar, above ‘Posts’ but below the ‘Dashboard’ tab and its divider :

This makes much more sense when using WP a CMS, and will confuse clients less, I believe.
Additionally, by creating a user account with an ‘Editor’ role for the client, access to many of the other tabs is removed and you get a much more intuitive and easier to use interface for less confident clients.
the resulting toolbar looks like this:

That’s much better. Of course, admin users will still get full access to appearance, plug-ins, settings, etc.
6) Create Additional Editable Content Blocks
One standard feature of most CMS’s that WP lacks out of the box is the ability to set up more than one editable region for a page. More complex layouts might require different blocks or columns that you need to make independently editable for the client. We also have that sidebar with all the blog-related widgets appearing on every page at the moment, and this should only appear in the ‘News’ section. How do we do these things in WP???
First we need to install the Secondary HTML Content plug-in by Jake Goldman. This allows us to add up to four additional editable content blocks to each page. On it’s settings page, you simply choose how many extra blocks you want to add (for this tutorial we’ll just add one), and check the ‘add media buttons’ tickbox*.

* ‘Add Media Buttons’ allows clients to add images via buttons added to the MCE editor (by default they can only create and format text). This feature doesn’t currently seem to work in WP 3.0, but presumably will be fixed by the author of the plug-in soon.
We now need to create a new template file on the server for our layout that contains the two editable regions. This sounds like a lot of work, but thankfully the Twenty Ten theme includes a template that almost does what we need. It’s called onecolumn-page.php and can be found in the theme’s directory.
Duplicate this file and rename it twocolumn-page.php:

Open it in the code editor of your choice and edit the comments section at the top, which WP uses to register the template and make it available in the admin area.
Change ‘Template Name:’ to Two Column, No Sidebar:

Now scroll down to line 30 and insert the following code into the loop, making sure it goes in between the end of the ‘#post’ block (the first editable region), but before ‘comments_template()’:
<div id="content2">
<?php the_content_2(); ?>
</div>
We could just insert the PHP function, but wrapping it in a div allows us to give it an id (or class) attribute and therefore style and position the block using CSS.
Save twocolumn-page.php and go back to the WP admin area.
7) Apply The Custom Template to the Pages
Refresh the browser, then start editing the ‘Home’ page.
On the right you should notice an section called ‘Template’ under ‘Page Attributes’. Our new template should be an option on the drop-down in this section:

Change the page template to Two Column, No Sidebar, and then do the same for ‘About’, ‘Staff’ and ‘Contact’. Leave ‘News’ as the default template, as this needs to keep the blog layout and the sidebar.
By default, the two editable blocks are unstyled, so will be stacked on top of one another. With a bit of CSS magic, these can be turned into vertical columns.
That’s It!
Finished Home Page, using the new two-column template:

Finished ‘News’ section, using regular blog layout with sidebar intact:

With these quick steps, which shouldn’t take you more than fifteen minutes, we can change a brand new WordPress install into a fully functioning CMS website that contains multiple editable regions, custom templates, a dynamically generated drop-down menu, a dynamic ‘news’ section, and a streamlined admin interface. The Twenty Ten theme is plain enough to form the basis of a unique design that can now be styled by simply editing the CSS.
Happy blogging CMS-ing!


July 7, 2010 at 6:01 pm
Thanks, very nice post :)
July 7, 2010 at 9:14 pm
Thanks for highlighting Secondary HTML Content!
There’s a lot of great stuff in the pipeline like custom post type support, in addition to a fix for the media button!
Pingback: Tutorial on building a static website | Maui WordPress
Pingback: wp-popular.com » Blog Archive » WordPress 3.0 to a Client Friendly CMS in 7 Easy Steps | Devon Web Design and Development – MightyMeta
Pingback: FreshlyGadgets !
July 17, 2010 at 7:51 am
This is brilliant! Thank you so much. May your tribe increase.
April 6, 2011 at 11:18 am
Ya, ya! Good contribution @ MightyMeta!
October 11, 2010 at 4:32 pm
Nice tutorial, but impossible to get the two-column template to work. Something must be wrong with the
[cc lang='html4' line_numbers='false' ]
[/cc]
code insertion
October 12, 2010 at 12:03 am
@Francois I had changed my code highlighting plug-in, causing the code to not be displayed. Now fixed and should work. Thanks for pointing out the error!
October 12, 2010 at 8:24 am
Thanks MightyMeta, working perfectly now…
October 12, 2010 at 11:38 pm
@Francois, glad to be of help.
October 23, 2010 at 12:13 pm
Thank you :D Got a lot info from this post and some useful plugins to spare some time :D
Thanks mate, really appreciated!
February 2, 2011 at 10:41 pm
Great post, I am just starting up in WordPress as a CMS and this has been the most straightforward and helpful post I have seen so far, thanks!
February 3, 2011 at 2:45 pm
Pleased to hear you found it useful David.
February 21, 2011 at 5:58 pm
Nice, well written tutorial.
Thank you for sharing :-)
-The only thing I cannot get to work is the ‘recent posts’ displaying on the News page
(they are in the sidebar on the News page but the editable part of the page is blank)
…any ideas please?
February 23, 2011 at 10:58 pm
Hi Mark. If your entire sidebar isn’t appearing on the news section then it may be because you are using something other than the default template for that section.
If it is just the ‘recent posts’ widget and the rest of the sidebar is intact, then I’m not sure what would be causing that :(
April 12, 2011 at 5:27 pm
This post is seriously amazing! AMAZING!
I’m just not sure how to use the Secondary HTML Plugin to make 2 separate templates. I did the one that you outlined up top with for the 2 Column Template and that worked perfectly. YAY!!
Now I would like to make a template that has 5 html areas? I tried the same procedure and I have 5 areas now but the other 4 are just repeating the contents of block 2.
Thoughts on this would be MUCH appreciated.
Again, thank you so much for this simple straightforward post!
April 14, 2011 at 10:10 pm
When you insert the PHP snippet into your template you need to change the number pertaining to the content area, ie
the_content_3();,the_content_4(), etc. Give that a try.April 15, 2011 at 2:05 pm
Excellent, well written template, however I’m confused with the twocolumn-page.php. I have copied the onecolumn-page.php per the instructions, but am not sure where to add the new code. I do not have a ‘#post’ block or ‘comments_template()’:
Don’t know if this is due to the version – I’m on 3.1.1?
Thanks,
April 17, 2011 at 10:14 pm
Hi Colin, should all be there on 3.1.1, look for the section that looks like this:
and bung it inbetween these two rows.
April 18, 2011 at 2:58 pm
Ahh, the code I’m looking for is acutaly in a file called loop.php (and various loop-xxxx.php files) rather than the onecolumn/twocoloumn-pahe.php file.
Guess I’ll have to do some tweaking.
May 9, 2011 at 1:49 pm
hi, fantastic article thanks a lot, got a similar problem to the previous poster that the latest version of twenty ten is different to what you have here and it seems to get a little complicated to add more than one html area – tips please?
thanks,
Jules
May 10, 2011 at 5:34 pm
I thought I’d checked it in latest version, but I’ll go back and have another look. will update article if needbe.
May 17, 2011 at 12:33 pm
@Colin Jenkins, @jules,
I have looked into your query and indeed, the latest versions of WP3 use a different template structure to that described in this tutorial. It is actually a simpler process now, but slightly different. You can find a revised version of this article here
July 7, 2011 at 3:45 pm
Thank you :D Got a lot info from this post and some useful plugins to spare some time :D
August 27, 2011 at 3:21 am
Really well written post. Nice one :) – most tutorials on wpCMS do one of 2 things:
1) just talk theoretically, or
2) dive straight into to hacking the php loop.
This tut is clear, concise and engaging. Best one I have seen on the subject for wpCMS newcomers by a country mile.