Yes WordPress Can

A polemic by Kevinjohn Gallagher about his decision to no longer use WordPress for client sites has been doing the rounds on various tech sites for the last day or two. Initially I wasn’t going to write about it, but there’s a lengthy discussion on Hacker News about WordPress and various other CMS‘s that provoked a few thoughts.

He lists fifteen features that he says aren’t included or implemented satisfactorily in WordPress core and a comment moderation ‘straw that broke the camel’s back’. So I thought I’d go through them and suggest plugins or additional core functionality that can be used. Unfortunately it isn’t clear in some of them exactly what he’s referring to, but here goes:

  1. Document management – There’s the Document Revisions plugin which he mentions.
  2. Workflow management – Edit Flow (again, which he mentions) and Pre-Publish Reminders is good way to make sure users don’t forget, for example, to make sure they tag posts and set a thumbnail.
  3. Digital asset management – I’d definitely agree here that the media library could do with some love and attention from WordPress core developers. File Un-Attach is a  useful little plugin that allows you to detach and attach media to multiple posts.
  4. Link management – Presumably he means permalink structure, something like Redirection might be suitable, as it can take regular expressions as redirect rules.
  5. User management – Both Members and Role Scoper allow you to create access control lists beyond the WordPress defaults.
  6. Caching & CDN – There’s a plethora of caching plugins, I use W3 Total Cache on client sites (as well as my own). It’s got more settings than an aeroplane dashboard, but the most suitable ones are set by default and it integrates nicely with most popular CDNs.
  7. WYSIWYG editing – TinyMCE already does this in core and you can extend it with an editor stylesheet so it matches your theme exactly.
  8. Single Sign-on – I’ve not implemented something like this before, but OneLogin SAML seems to add the functionality.
  9. Multi-side Admin – By this I presume he means accessing admin functions from the front-end of the site, this is possible to do with any theme or a plugin like Gravity Forms.
  10. Publishing options – It’s not clear what he doesn’t like about the current publishing options or what additional ones he’d like, so I can’t really suggest anything here.
  11. Access Management – Again, either Members or Role Scoper should do the trick.
  12. Application – Using a CMS as foundation for a web app probably isn’t the best idea in any case, but it’s by no means impossible with WordPress.
  13. Multilingual – WordPress is available in over 70 languages and dialects and there’s an article in the codex full of solutions to make the front end available in multiple languages too.
  14. n-to-n content sharing – Something that might be solved with networked storage or a CDN, rather than in core or with a plugin.
  15. Reporting – Not sure what he means here, so I can’t suggest anything.
  16. Comment Moderation – the straw that broke the camels back. Once more you can use Members or Role Scoper to add the moderate_comments capability to any user or role.

There are two questions I’d ask in response to Gallagher, firstly should all of this functionality really be in core? and secondly what alternative to WordPress will he be using?

I’d argue that a lot of this functionality shouldn’t be in core and should be left to plugins instead. There isn’t a CMS out there that I can think of that offers all the functionality he lists out of the box or with decent plugins.

The other big bone of contention he has is with the WordPress update process, for both core and plugins. Which to most WordPress users will sound absurd as it’s one of the best things about WordPress compared to other CMSs, which often have no update notification let alone  WordPress’ one click update process.

Major WordPress core releases are every four months, usually with a handful of betas and a couple of release candidates before. So there’s plenty of lead time to fix any plugins or themes that are incompatible or need to update depreciated functions. An intresting aside – depreciated functions aren’t actually removed, so a theme using template tags from 1.5 will still work in the latest version, albeit perhaps not exactly as expected.

In the Hacker News discussion a few people have made comparisons of WordPress with other CMSs with regards it being their junior in terms of function and flexibility. Even though I’ve developed WordPress sites for a few years now, I still feel as though I’m only touching the surface of what it can do. When clients have come to me with what they want their site to do, I’ve never had to say to myself, or them, this just isn’t possible with WordPress.

That’s not just because I’m making simple blogs for people either. The three most recent sites I’ve built for people have been a portfolio site for a photojournalist that uses custom post types for galleries, a fully functional eCommerce store using the WooCommerce plugin and a rich news site that sits perfectly on top of WordPress’ built in post, category and tag structure.

WordPress is the most popular CMS on the internet. Once you’ve used it and tinkered around with themes and plugins it’s easy to see why. A clean, intuitive interface for users; logical and well documented template tags and almost limitless extendability with plugins.

Anyone reading Gallagher’s post, a comparison of WordPress against another flavour of the week CMS or ‘this CMS I coded myself over the weekend in an obscure programming language and is way better than anything else – ever’ should have a take a good long look at WordPress and they’ll probably realise: we can do this with WordPress.

I’m fairly new to WordPress but the features above are the ones I’ve been wondering about. If I stick with WordPress for future projects your list of plugins will be very helpful – thanks!

Hi Johnathan,

I hope you don’t mind, but I’m going to take some time to go through this list, in the same way I did with Andrew Nacin 7 weeks ago (oddly, no-one cared about it then – even when he linked to it).

“He lists fifteen features that he says aren’t included or implemented satisfactorily in WordPress core”

At no time did I mention CORE. Never once. And it’s quite an important point that people have somewhat presumed I meant. I never said it, and didn’t mean it. It’s not true.

1. Document Revisions
Its ok. It is, and I use it. As I’ve said countless times on many sites for the last 6 months, we had one of our own and Doc Revisions is better than it. But I’m sorry WP fans, in comparison to some of the alternatives out there, it isn’t good enough – yet. Again, I’m a fan, I like it, and I’m sure one day soon it’ll be awesome, but right now it’s not.

In part though, this is down to its and WordPress’ reliance on other plugins for certain functionality.

2. EditFlow falls into the same category. Its really good until it’s not. I could point this out to you, but they took down their roadmap last week. It can’t handle translations of the same post for example, or custom post types, or custom post formats or…

If you’re just editing ‘posts’ or ‘pages’ in a linear format, with users already in the WP DB (e.g. no LDAP integration for authentication), and everyone is speaking the same language, then it’s great. As soon as one of those things moves, it doesn’t work. It’s not a grey area, it’s black and white.

Again, I’m a fan, I like it, and I’m sure one day soon it’ll be awesome, but right now it’s not.

3. Digital Asset Management is NOT the same as an Image Repository. It’s massively massively different; although both can store images. I’m not saying WordPress should have one, I’m just saying that it doesn’t (and frankly, competitor CMSs do).

4. Link management – “Presumably he means permalink structure”… No, oddly I think permalink structure in WP works well once you know how to overwrite it. 3.3 had a lovely fix to the overhead too (thanks Otto). In its simplest format: Link management is where the links are not hardcoded into the pages. So you can manage the links on any given page/template/theme and not have to go an update and broken links. If you’ve not seen this in action you’ll wonder what the fuss is about; but then you see it and you wonder how you ever did without it.

Let me give an example. Your website has 8-10k pages, and about 200 point to a certain link. You want to change that link on all of the pages to stop pointing at “sports” and point to “baseball”. You still want the page “sports” to be there, so you can’t redirect from that, how do you update the content in an unknown number of pages so that the link is accurate, all at the same time (lets say its a legal requirement) AND with NO CODING? And due to said legal requirement, you have about 5 minutes to do it…

See in other CMSs, when you add a “link”, you’re adding a content-block, or piece of meta-data, to the page, and that meta-data points to the link. So you only need to change it once. I promise you, once you hit over 1000 pages, this sort of thing is a fundamental.

5. User management

In order to mark a comment as spam you REQUIRE to have the CAPABILITY to edit any content in the CMS.

6. Caching & CDN –
Loads of settings means nothing, and none of them have ESI or dynamic content block by block specific caching. Sorry, but most of the other stable CMSs have this, and have had it for years. Heck Apache and nGix support this out of the box.

The issue becomes when only 1 “part” of the page changes, but the whole (or most of it) is reproduced at runtime. I can give concrete examples off-line where this has been a monumental issue for us. Can we defensively code around it in a theme? To a certain extent, but honestly, we’re miles behind on this.

7. So that’s not WYSIWYG. This is:

8. SSO.
Ok so this is where people think about their own situations, or worse, Facebook. What we talk about it integration with other systems so that they can talk to each other, e.g. MediaWiki, or Forums etc. Instead almost every option out there is coding it’s own and they break every WP Upgrade. If there was an API this wouldn’t happen. This one is a quick fix!

9. Multi-side Admin – “By this I presume he means accessing admin functions from the front-end of the site” What?? Who mentioned front-end?

10. Publishing options.
Staging, push to live, push as static, push parts as static, push to different servers etc.

11. Access Management –

No they don’t, they don’t do it on a granular level. Because a single content block in WordPress is a complete post or page. It’s a 1-1 relationship. Access Management to a site, or certain pages is easy. Different part of content based on certain criteria isn’t, and doesn’t work.

12. Application –
Y’know, everyone says that it’s possible, but when I ask for a link *tumbleweed*. Oddly Andrew Nacin never said it was possible. Y’know what though, everything in the world is possible (except dinosaurs – Kenneth, 30 rock) but its how probably or feasible it is. This is a big issue to me.

13. Multilingual –
No dude, not having the menu in a different language, I mean the ability to have multiple versions of any piece of content based on different languages. Allow me to quote Andrew Nacin

“This is definitely a sore spot. Most of the plugins that try to do this, do it really poorly. Not much different than the e-commerce offerings, currently.”

14. n-to-n content sharing

No, that’s not what this is. It’s the ability to reuse content blocks. Much like the links management example. Each bit of content is stored individually, and the user can reuse – without any coding. It also allows cloning, version control, templating on the fly, and modularization.

To grossly over simplify: imagine every piece of content is like a WordPress Widget. On any given page you just drag on the piece of content you want. That can be an image+paragraph, a press release, or a database-control that pulls the last X blog posts. Theme developers would create modules of content and layouts, but the page editors could drag and drop the content they wanted on any given page. Again, once you see this is action, watching your users attempt to edit columns in TinyMCE becomes exceptionally painful.

Again, look at:

15. Reporting

The ability to run reports for legal, branding, compliance, the FSA, the FCC, the Governement etc. Once you get to a certain size of organisation these are a prerequisite; and most other CMSs have them.

16. Comment Moderation –
SERIOUSLY, why wont people to listen to what I’ve ACTUALLY WRITTEN and not what they think they heard. YOU CANT DO THIS. If you give someone the capability to “moderate_comments”, and don’t give them the capability to “edit_posts”, it wont work. WordPress has HARDCODED the requirement for these 2 to be needed to moderate comments. It can’t be overwritten by a plugin. You need to hack the core to allow this to happen.

I seriously wish the WP community would test this stuff before writing on blogs that it can be done. You don’t know that, you’ve presumed it can. But you write it as it’s its a fact. I don’t care if I’m not well liked, but honestly, so many people in the WP community are just making things up, and calling them facts.

Its a great example of the “There’s a plugin for that” mentality, especially when there’s not a plugin for that. Too many people use Google, rather than any testing or PoCing to make sure that what they are writing is correct.


“Should all of this functionality really be in core?”

No, and I never said it should. Ever. Anywhere. Ever.

“I’d argue that a lot of this functionality shouldn’t be in core and should be left to plugins instead. ”

I agree. But some of it needs to be driven by the core. It’s the architecture that the problem. Parent, Child relationships are 1 to 1. There is no geneology, no N-to-N, so every plugin just does its own thing, and then we have loads of custom tables and what ends up being the same situation as proprietery software when people are stuck.

“There isn’t a CMS out there that I can think of that offers all the functionality he lists out of the box or with decent plugins.”

Then you should really look around again. There has been a massive change in the CMS platforms in the last 9 months. MASSIVE. Do they all have drawbacks too? Heck yes. But really, many of the other CMSs took a large leap in the last 18 months, and if you’ve not looked at them, you’d be very very surprised.

AdobeCQ, Drupal 7 (with Gardens), Concrete5, EE and Joomla2.5 are great exmaples of this.

“The other big bone of contention he has is with the WordPress update process”

I really hate when people badly paraphrase me. What I said was this “Our clients have consistently given us worse and worse feedback on the update process”. It’s never on time, there is never a real feature freeze, BETAs are alphas, JQuery version is changed 2 days before RC1, and again at RC2, and they all live in fear of another Capital_P_dangit style function being added without a Trac ticket and after months of beta and RC testing.

Oh, and the Admin UI changes. That the real kicker. At least 30% of my clients are disabled in some form or work in a charity/government/education sector where they have to be able to accommodate staff with disabilities. Every single UI change requires staff training. I know that’s daft to you and me as its quick to pick up, but if you’re blind you can’t see what the f**king changes are. Last year the menu moved twice, and changed the way it worked once, the icons changed to a pale grey so they can’t be seen by color blind people, and the admin bar was introduced and then dramatically changed. If that happened in 1 go, that would be fine, but it happened across 3 releases.

“Major WordPress core releases are every four months, usually with a handful of betas and a couple of release candidates before. So there’s plenty of lead time to fix any plugins or themes ”

Except that’s not accurate anymore. Companies like mine are not confident that a new version of jQuery wont be added at the 3rd beta release, or that a capital_p_danit wont be added. Look at this:

“That’s not just because I’m making simple blogs for people either. ”

Right and I get that, and you’re right that WordPress is really good little CMS. But at a particular scale (not technically, but functionality and people wise) WordPress doesn’t cut it any more.

I have countless examples of this, and would be more than happy to share them over e-mail or on a skype call; but honestly when people start talking about using WordPress for something non-blogging and then give me examples, I think, respectfully, thats not in the league of the requirements I’m getting.

And for the most part, on all of these discussions, what’s missing is: CONTEXT. I never wrote my blog post for public consumption, I never wrote it to the WordPress community, I never publicized it. So everyone who’s reading it has added their own context as to what I meant.

More than anything though, I can’t stress strongly enough that people read this conversation from last year:


So a long reply, and I’m sorry for all the typos (i’m writing on a phone on my way to ANOTHER airport).

Take Care,