It might surprise you how infrequently I build WordPress sites intended for actual blogging. More often, I’m building 15- or 20-page websites for businesses who need a bunch of static content displayed in a variety of ways. Some of this can be accomplished with plugins, but the rest must be inserted in the post-edit screen, making things messy for the client:

That’s one big drawback to using WordPress as a CMS: the lack of custom content types/groups, an area where Expression Engine really shines. EE’s custom field system allows developers to put restrictions on how clients insert content. This keeps the content clean, portable and relatively unbreakable because all the structural HTML is tucked away in the templates themselves, not in the post-edit screen.
In this sense, WordPress is not quite a “full-fledged” CMS and developers must create workarounds.
Custom Code
Here’s a page from a recent WordPress project:
Notice the 6 thumbnails and excerpts in the left column. Any attempt by the client to add/edit that information could easily disrupt the HTML and potentially break the design:

Even if the visual editor was turned on, the client wouldn’t be able toor necessarily know how toproperly wrap those elements with the necessary HTML. And if the client tried to copy-paste content from another site, the visual editor would inherit that HTML, creating a jumble of inconsistent code.
Luckily in the case of Spring Creek, we ended up writing some special PHP mixed with custom fields and TimThumb to generate and format the content, but not every client can afford to pay for that kind of automated solution.
Content Chunks as “Pages”
Here’s another page from a recent project:
In the sidebar of each static page is a chunk of related content. One method we’ve tried in the past is breaking up sidebar content into separate Pages and using PHP to dynamically insert them wherever appropriate:

That keeps keeps the code cleaner, but unfortunately adds a layer of confusion for the client who must edit his Page content and Sidebar content in two different places.
The <!–nextpage–> Quicktag
So for VA Film, we decided another way to break the content into pieces without allowing the client access to any structural HTML was to deploy the nextpage function:
The sidebar content gets called from within the template, like this:
<div id="sidebar">
<?php if ($numpages > '1') { ?> <?php $temp_query = $wp_query; ?>
<?php query_posts('page_id='.$post->ID.'&page=2'); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div class="entry"> <?php the_content(); ?> </div>
<?php endwhile; endif; ?> <?php $wp_query = $temp_query; ?>
<?php } ?>
</div>
It’s still a hack, but it allows the client to edit primary content and sidebar content in the same place without inserting any extra <div>s. There are other useful hacks of the <!–nextpage–> function that I’ll write about again soon.
Widgets
The last obvious method would be to create multiple widgetized regions in your theme. This practice is becoming more common in themes like Thematic.
Unfortunately, while the concept of “widgets” might make sense to bloggers, it doesn’t always make sense to the business owner. And depending on the content, it may still require some HTML knowledge, for example: floating an image, inserting a list, or requiring certain <div>s:

Questions
Obviously none of these solutions is perfect. Static content can be displayed in a number of wayscolumns, quadrants, floats, listsbut the more ambitious it becomes, the less likely the client can edit it cleanly. In my experience, nothing compares to the rigid control offered by Expression Engine’s custom fields.
Final thoughts:
- What other ways can we prevent clients from breaking layouts?
- Should we design page content to be as simple and linear as possible to allow clients easier editability?
- Should we insist the client learn a bit about HTML before handing over the site?
- Should we write elegant hacks based strictly on how much money the client can spend?
- For larger sites with variable page layouts, should we just opt for a true CMS like Expression Engine instead? Should we not compare apples to oranges?



Follow me on Twitter
10:08 pm
This is one of the reasons I find Drupal so exciting. Like EE it’s really easy to create your own custom content types. But it is possible to create custom content types in WordPress.
10:26 pm
Great post, Darren. I agree that ExpressionEngine does a much better job on more complex sites where multiple content areas are required. Custom fields just don’t cut it in WordPress; they aren’t made for big chunks of content.
I’m still waiting for a plugin that lets you build your own write page – even if it’s just adding various text boxes. Maybe someone with a bit more PHP knowledge than I will eventually take a crack at it.
I still believe that WordPress is primarily a blogging platform (despite the recent movement to transform it into a CMS). You can hack it up all you want for yourself, but in the end, it usually doesn’t simplify things any more for the client. This is definitely something to experiment with.
10:30 pm
Flutter cms is an interesting solution.
12:11 am
@Ian wish Drupal was easier to use.
I need to learn EE.
12:13 am
Flutter has been frustrating for me – for as much as I want to love it, it’s still too quirky and reliant on other code. I’ve been making good headway with Henrik’s More Fields and even good stuff from WPgogo Custom Fields plugs.
Agreed that EE (along with so many more CMSs) simply do what a CMS is expected to do. However, I’ve noticed that I’ve spent almost equal time adjusting the backend of EE for the client, to the same amount of time actually building the site and adding content. WP usually is so much quicker for me to turn stuff on/off so the client doesn’t inadvertantly “wander” into places that might wreak havoc.
Cleaner still is Function’s Custom Write Panels post for the WP “do it yourselfer”.
3:50 am
I think that there should be a facility to add a new write page where you can choose custom fields and only make it available to one category.
This way you could have a property listings site and it’s a clear distinction between adding a property and adding news. This means there doesn’t need to be 1000 different plugins to cater for all the different industries as you can create your own.
Anyone know of any further development going on here?
9:15 am
WordPress as CMS for the Spring Creek site was exactly the right solution. The extra time spent to customize and ensure that the client (or their marketing firm) doesn’t break the design was necessary, appreciated and worth every penny.
11:19 am
Darren, I strongly recomend for similar cases the use of this plugin, its make things easer for developer and clients ;)
12:11 pm
i think,too..
2:21 pm
Something I’ve thought a decent amount about too. I know that Wordpress is a blogging system first, but it seems like they should recognize how many folks are using Wordpress as a CMS and find some solutions to the problems that it presents.
Looking forward to the new stable version of More Fields to allow for a bit more flexibility.
I’m also on the cusp of looking into EE as an option for my clients, but haven’t quite jumped in yet. I think its quite strange that EE doesn’t have page hierarchy at all, and achieving it seems to get rid of user friendliness (like having to change the date on a post to reorder them) Will try it out soon.
6:02 pm
@ian: I can’t tell if WPFun’s solution is more or less trouble than setting everything up custom in EE. I guess the main difference is that it feels more like an experiment to do it in WP (esp for a quantity of paid projects) whereas with EE, it’s using the software as it’s meant to be used. I struggle over that argument a lot.
@Dan, Kel, Chris: I’m going to play a bit with Flutter tomorrow. I like the solution from Function, but I need to get my head around it.
@Steven: In the past, I’ve used post categories to make my own little non-blog applications, like this portfolio page. But if a client needs more than 2-3 pages with custom data like that, I’m likely to recommend EE before the contract is signed.
@Marijean: I’m happy that you’re happy ;) You’re been an extremely cool and easy to client to work with, plus you give us cupcakes when we do a good job.
7:25 pm
@jesse and alessandro: thanks for the plugin recommendations.
Regarding the pages and menus in EE, it’s puzzling that really obvious stuff requires plugins instead of being part of the core, whereas in WP they’re handled pretty elegantly — seems like it should be the other way around. More proof that there are no silver bullets in the CMS world yet.
5:31 am
well well .. the Widget-based solutions looks much promising. The problem with HTML insertion could be avoided using a WYSIWYG-editor widget instead. Depending on the content, you could use said one or some simple input field, where no HTML input is required.
Some examples:
a) “About us-”page, introduction text – take the WYSIWYG widget
b) Some link to someplace else – take the simple “input field” widget
c) Need to enter a headline or title? “input field”
d) News page entry? Do it the WYSIWYG way!
Note: About half a year ago I worked with some folks who indeed use a CMS working the above described way. It’s used both for websites of big financial and churchly organisations.
cu, w0lf.
9:05 am
I tried hacking Wordpress to use as a CMS for a couple sites, and it was way more work than it was worth. Then I tried CMS Made Simple, and I have never been happier. I cannot recommend it enough.
1:19 pm
I’m surprised that you didn’t mention Custom Fields. I used them quite extensively on the StoryCorps website and it has worked very well. Between that and Improved Include Page, the whole site practically built itself! (I am totally exaggerating, but they are important tools)
The Wefunction website seems to be down now, I would love to see what these Custom Write Panels are all about.
6:03 am
Awesome..hopefully in future maybe WordPress will help to use static content and make it easier to use as CMS..:) Lovely work.
11:07 am
People have used wordpress as a CMS for a long time now, but creating a “special backend” (for those not so technical clients) with custom fields still is a big problem. There are a few plugins that help with that but the problem is far from resolved.
Using EE is a solution for some clients, but not for most of them. Maybe I should have a look at Drupal one more time.
Joomla will probably work as well but the back-end will scare any customer (even the brave ones! :) )
3:59 pm
@ Darren
If you are dealing with 10 or so different page types, who not use custom pages (templates) and call different page template from the write page. Any time you include inline HTML you are bound to have issues with users tweaking or worse breaking it. I am guilty of using inline HTML tags on my site, but my theme is designed for such abuse and I am aware of what I am dealing with, but it is unfair to expect clients to do the same.
6:55 pm
fwolf: those are good suggestions. We haven’t traditionally pushed the widget solution on clients, but would consider it if we found a foolproof way to make it easy.
@Cristi:
Have your clients had bad experiences with EE?
@Sonny:
If we received all the content upfront and could analyze how to lay it out and how to design custom templates accordingly, that might work fine. Unfortunately, the content never comes in time, and most clients don’t know how to design their own custom templates when the time comes. It’s the old chicken/egg debate.
12:17 pm
Hey, all of you!
I can only recommend Ryans simple CMS for the Back-End. It disables everything a client (user class below administrator) won´t need. Pretty nice sollution. But what i´m still searching for, is a widget closer to EE-custom fields. Hard to describe. we are trying to implement 4 widget regions that can be attached to a static page. the template contains only navi+subnavigation and the header. everything below should be “widgetized” so even the client can rebuild the whole homepage via drag&drop and easy text-editing and selecting images from his library/mediathek via drag&drop….
thanks if anyone answers on this and can provide some ideas.
3:51 am
What about this?
http://wpcandy.com/plugins/creating-custom-content-type-with-flutter-plugin.html
1:21 am
Thanks for a great post. I’ve struggled with this in the past. WP has great potential with a few more good CMS plugins.
10:11 am
@Chris – I hated everything about CMS Made Simple. Sorry.
WP – even in its simplicity can be complicated for clients. As fluent as we may be in XHTML, that learning curve is a you-know-what for the average client. And while we may sometimes take that for granted, I think that if we take the time to provide thorough explanations of how to get it just right, it will help them out. Some clients out there actually vet the major league CMS systems out there to decide which one works best for them, and I usually hear that drupal is “a crock,” joomla is “too much for too little,” and so on and so forth. So, when you have clients who want WP, I think you just have to keep in mind the abilities of the system and the abilities of the client when you design your mockups. Helps save stress and time and avoids disappointment, I think. LOL.
12:06 am
Hi Darren,
I am new to blogging and have a descent knowledge of XHTML and CSS (no PHP unfortunately).
I just came across the magazine styles themes and LOVED them. I down loaded the the MImbo Magazine theme and I will start working on it shortly. I was wondering if you could confirm or correct my assumptions regarding these themes.
I am a pro photographer and as you can see from my blog I now use it primarily for galleries posts. However, I always wanted to have more in my blog. For example, I create digital albums and wanted to create a flash gallery feature photos of different designs and have a full article explaining why they are a benefit to my client and have it withing my blog on a static page.
The thing is, as blog go, it would be pushed downward as I keep posting. The magazine style blog allows for static content to be always visible in the main body page (as oppose to the sidebar), is it true?
The ability to have such a large amount of static pages is great but is it possible to custom design them a bit so they don’t look exactly all the same?
Is it also possible to have each post and each static page has it’s own page title like in a regular blog?
By the way, just a bit about my blogging habits, I am the only author of my blog/site and will post about once every two weeks (if it makes a different for different style blogs)
I really appreciate your reply. I will definatelly create a regular web site with galleries and clean interface but I really think that a blog (like the magazine style blog) can do so much more for me than just posting articles every now and then.
Thank you,
Motti
6:39 pm
Thanks for sharing your experiences, Darren! You’ve inspired me to do the same. I am about to write some blog posts about some of my recent projects, where I used Wordpress as CMS.
I see more and more articles and tutorials about custom options in the Write Panel and even full blown admin panels for WP themes. This is great news for all of us Wordpress geeks, because as soon as something new comes out, information starts to spread like a “virus”. Then people take that information and add their own knowledge. It’s this “snowball effect” that makes us develop better WP themes.
Of course there’s a lot of really good stuff in commercial themes, so my advice to WP theme designer wannabes is to go and buy at least one of these themes. It’s probably the easiest way to pick a WP guru’s brain. ;)
3:17 pm
@erika: I think that if we take the time to provide thorough explanations of how to get it just right, it will help them out. – Yeah, I’m actually encouraged by how many clients these days are willing to learn a bit of code and other methods of making their pages more attractive. This was definitely not true just a few years ago, prior to projects like WordPress and Joomla becoming more mainstream.
@motti: all the things you asked about are possible. I would recommend looking at the WP Codex.
@adrian: I’m glad, too, that more developers are pushing the boundaries of WP.
On the other hand, to be perfectly honest, my attention has been shifting elsewhere in the last few months, mainly toward tools like Expression Engine which allow more of what I’d consider “total control”.
I don’t really know if the developers at Automattic even want to evolve the core software to act more like a CMS, or if it’s more focused/strategic to simply make it a great blog engine. I’d love to hear from Matt, Lloyd, et al, about this.
As always, I’d say: use the right tool for the right job.
3:54 am
Yeah, I always said I would give EE a try at some point! WP has its limits indeed.
1:10 am
Love the design on Spring Greek.
12:42 pm
@darren: In our case, it’s not a good idea to prod the clients to learn even a little bit of HTML. Have you tried using other CMS for corporate sites that would be unbreakable? Joomla? Drupal?
1:17 pm
you mention in the beginning of this article the 6 images could cause an issue which you are right but you could have created a page template. the client could then choose the template and use it on other pages as well. how you set it up to work would be up to you, you could do it so it is pulling in images from a certain category post or so that using the custom fields it add teh images in there.
1:29 pm
@Ann Arbor WD: thanks!
@Rick: I’m not a fan of either Joomla or Drupal. EE best accomplishes what I need in terms of content control, but a lot of clients still ask for WP by name. WP also has the advantage of a large plugin community.
@slee: that’s actually what we ended up doing. Instead of tossing all that content into the WYSIWYG editor, we created a custom template that pulled thumbnails and excerpts from the relevant subpages. Required a fair amount of coding, but the client could afford it and because it’s automatic/streamlined, it pays for itself.
4:28 pm
it is longer maybe slightly a pain in the bum but for the client it is very worth it.
I am interested in EE i have come across it a few times but it doesn’t seem to be very good when viewing the demo.
7:26 pm
I have used wordpress for a lot of clients and the main problem we run into is for the content on the home page. Because there are generally different sections of cotent, this is where any breaking occurs. On the inner pages, it’s pretty straight forward unless they have segmented sections.
EE does seem like the best solution for it.
3:21 pm
i now only use wordpress because it very easy, flexible. But mysql query decision is not good( fulltext index none)
3:38 pm
“Luckily in the case of Spring Creek, we ended up writing some special PHP mixed with custom fields and TimThumb to generate and format the content, but not every client can afford to pay for that kind of automated solution…. In my experience, nothing compares to the rigid control offered by Expression Engine’s custom fields.”
Was it cheaper to write “some special PHP mixed with custom fields” than it would have been to use Expression Engine?
“Not every client can afford to pay for that kind of automated solution” – so this also excludes Expression Engine?
So, is there the sense that WordPress is the least expensive CMS to use?
4:02 pm
“What other ways can we prevent clients from breaking layouts?”
I believe that, eventually, this problem will be solved at the level of TinyMCE. I suspect we are 3 or 4 years away from that. I think eventually visual editors like TinyMCE and FCKEditor will have the same power as Dreamweaver has now. By that point, however, the Javascript libraries will be frighteningly bloated, so the future scenario I’m describing depends on faster computers, faster browsers, faster Javascript engines and faster download times (imagine sites with 8 or 9 megabytes of Javascript – I believe this is the future, even if it sounds freakish to us now).
All of the current valid criticisms of Dreamweaver will apply to the future visual Javascript powered editors, and new complaints will emerge, I’m sure. But aside from all that, I believe that clients will eventually be empowered to design much more freely than they can now, with the Javascript automatically fixing the errors the clients accidentally create. Empty tags, tags that don’t close, incorrect nesting of tags — all this can be fixed automatically. This, I believe, is what will happen in the long run. In the short run, I’m less sure of the path to take.
4:17 pm
“I guess the main difference is that it feels more like an experiment to do it in WP”
Although, interestingly, people on the core WordPress team seem to think this is the way to do things. I once had Andy Skelton over at my house and asked him how he’d handle the redesign of one of the webs largest political sites (a project that was in discussion at the time) and he suggested roughly the approach you and others have discussed here – a mix of using custom fields and plugins that get the most out of categories. I asked him if maybe the project should be done using Joomla, but he felt strongly that WordPress was up to the task.
11:08 pm
Ultimately, yeah, because the PHP was written in a couple hours, vs. an additional 10 it might have taken to review the content and time-consumingly set up EE and the various custom fields to accomodate it. Clients who have a clear vision for their content and a tendency to be meticulous about how it gets displayed will often shell out extra to ensure it happens smoothly. EE seems to make them happy.
In the short run it’s probably best to stick with straight-forward/linear layouts that make it easy for the client to add content. They might not be visually dazzling, but they’ll present content in a clean, readable fashion.
If text-based news articles and archives are the end goal, then sure, WP can be remixed significantly to handle it. If your end goal are to have things like custom listings, tricky image galleries, etc, EE is a great choice and (to me) easier to scale later on.
5:25 am
hey everyone,
when i´m looking at “framework-frameworks” like thematic- or hybrid-theme with loads of (completly widgetized) page-templates in combination with (for e.g. 960) css grid-systems, then i see the future much brighter. imagine text- or image-widgets placed freely on a grid in a easy-to use and reduced admin-interface by your client himself in every page he needs. no real need for custom fields anymore in such a case. we´re just one small step away.
@ lawrence: i think what you describe is pretty much what we will have in some years.
wish you best.
11:53 am
wonder if anyone of you tried this one instead of ryan´s plugin: http://wp-cms.com/our-wordpress-plugins/post-control-plugin/
11:55 am
…or this one: http://wordpress.org/extend/plugins/wplite/screenshots/
8:17 pm
Darren,
Like you, I’m a huge fan of Wordpress but found its lack of content types frustrating. I created a plugin called Pods that might be of some use to you. I enjoy using Wordpress much more than other CMS tools (Drupal, EE), and felt like Wordpress deserved a clean and intuitive way to add new types of content.
http://pods.uproot.us/
Let me know if it’s what you’re looking for.
11:08 am
I’ve been puzzling over this same of thing for some time now, and I was grateful to stumble on this post. I don’t think we should be teaching our clients HTML; for most of my clients, that’s just too much for them.
Your use of the Next Page quicktag has got me thinking. What about custom quicktags added through a plugin? I have no experience adding a button to the WYSIWYG editor, but imagine the following steps.
1. Click the “Layouts” button on the WYSIWYG editor.
2. A popup appears with a dropdown; select “Three Columns”. Click OK.
What if that loaded into the editor the following content?
The WYSIWYG editor would need custom images to show in place of these. A formatting filter would need to break this up and add all the right HTML.
You could have options for different chunks. Suppose you had an option button labeled “Sidebar” that created code like this:
A filter on the_content would need to know to strip out a specific set of chunks, but I think that could easily be done.
I think a plugin like this that allowed you to add different codes and define the HTML from the Admin section would be excellent. (I imagine the interface would be similar to cforms; instead of creating forms, you would be defining a quicktag substitutions.)
11:23 am
“A filter on the_content would need to know to strip out a specific set of chunks, but I think that could easily be done.”
I think at that point you are creating such an artificial hack that the setup will become brittle – any little change later on can break the site. WordPress’s plugin system is relatively frail – add to many and they start to break, and they also break (way too easily) when you upgrade versions.
11:41 am
(As expected, the code got mangled. Here’s another attempt: substitute square brackets for angle brackets.)
… and …
11:44 am
@Matt: Pods is amazing
@the rest of you: when you´re not using pods i can strongly recommend using ‘custom field template’-plug in – maybe the easiest and best way to give your clients to options they need per page/article/else
you can easily add what you need, name it the way, your client understands it and add the call for custom values in your wp-templates.
10:52 pm
@Randy: that would definitely be a nice option. I agree, the client should have to deal with minimal to no HTML.
Similar to what you suggested, I have done themes in the past that contain 3-4 custom templates/layouts, each pre-populated with PHP functions. When creating new pages, I simply apply the template and enter the content. This requires me to create several pages and name them stuff like “about-us-column” — obviously, not a great solution.
@Kaiser: agreed, it’s been a helpful plugin, though I’ve only used it once.
1:28 pm
@Martin Bavio: Pods and Flutter may do a good job. Thanks for the link. I´ll have to give both a try with the next project.
@Darren: the chicken-egg debate is an easy thing. in evolution the dns changes and the next generation get´s born with the rearanged dns. so the animal who laid the egg with the chicken inside was no chicken and so the egg must have been first ;)
4:59 am
Hello there,
I am trying to have different sidebar content per page. I have just want to be able to list my subpages of the current page in the sidebar only where the user will . I found some code, but it always list all the subpages.
Any help will be appreciated.
this is what I am looking for.
page (a) will have in the sidebar only subpage (a)1, subpage(a)2 and page(b) will have in the sidebar only subpage(b)2, subpage(b)2
Thanks for any help
9:01 am
@Toure: why don´t you give the wp-forum a try? this is more a discussion then a help-thread.
@Matt: The ‘only’ thing i would like to see with “pods” (which i still think is the strongest, most comfortable, best, whatever custom field plugin) is extra-fields for users, so it would catch the whole spectrum of custom-content needs.
For the rest of you: Pods makes wp ultra strong and maybe the best cms out there… don´t know why that less people are using it. no need to add tutorials for clients. you simply set up a write-panel for whatever you need and make the content client-save. i think pods ends every discussion about wp as a rock solid cms. (now go and praise pods ;)
10:06 am
thanks so much great article.