WordPress is a great tool. If you need to run a basic CMS to get your words and images onto the internet, I’d never hesitate to suggest that you use WordPress. It’ll make it really easy for you to get all that stuff online, and better yet, there are thousands of themes to choose from at every conceivable price point.
This functionality is core to the experience of WordPress. Jumping around from theme to theme without worrying what’ll happen to all your words is an amazing thing. Anyone who’s spent more than five minutes dealing with a static HTML site will rightly be impressed by this feature.
Themes are awesome, but…
But there’s a problem: a lot of WordPress themes break this magical flexibility. Either because of changes the user makes to a theme that was originally aligned with this vision of flexibility, or because the theme wasn’t designed with that flexibility in mind, on a lot of WordPress sites that flexibility has disappeared.
I’ve personally been responsible for ruining this flexibility on my own sites.
functions.php is a really easy place to paste functionality snippets you find on the internet. It’s so easy it almost justifies the fact that you’ll lose that functionality when you switch themes.
Commercial themes, especially historically, have been even more guilty. On the outside they offer you immense power, and when you first use them, they seem to keep their promise. The heartbreak comes later, when you finally try to make a swap to a different WordPress theme and weird things happen. All your SEO data, well-crafted portfolio elements, and cool taxonomic structures may be gone. And some of your posts and pages are liable to have these weird [broken_shortcodes] inside of them.
That’s Theme Creep!
“Theme creep” is what I call it when functionality that has nothing to do with the presentational layer of a WordPress website “creeps” into the theme.
It’s what? “Theme creep” is what I call it when functionality that has nothing to do with the presentational layer of a WordPress website “creeps” into the theme. What this ends up doing is chaining you to a WordPress theme that seemed like a beautiful and great one for your site when you first saw it. Chains you so that in six months or thirty, when you find yourself wanting a visual change of pace you’re left with a terrible choice: your pretty new look or your properly functioning WordPress site.
This problem is the topic of my talk at WordCamp Boston this coming weekend. If you’re not going to be there, don’t fret. I believe videos are being made of all talks. And this post summarizes the first half of the talk. We’re planning to make a post next week about the second half — fighting back the theme creep menace.
The Underlying Problem in Theme Creep
This sort of brittleness of systems typified by theme creep has been bedeviling software makers for almost as long as there’s been software. They’ve even developed some great ideas for preventing it and terminology for explaining it.
One of the most important ideas relevant to theme creep is called the single responsibility principle, which states that every component of a system should have exactly one responsibility and that that component should completely contain that responsibility. For WordPress themes, that would mean that they are only responsible for the visual layout and design of the site. They shouldn’t be responsible for registering data types, or providing for the display of post data in shortcodes, or anything else I’ve mentioned.
When a WordPress site is working properly, themes can be easily swapped out and nothing is lost in the change. This is a direct manifestation of the single responsibility principle working to keep a system simple and flexible. Visual changes will obviously occur, but nothing other than the look of the site will be impacted, broken, or damaged as a result of the simple theme swap. And for many themes from many providers, you can count on that promise of WordPress themes being kept.
But in the broader WordPress ecosystem, this single responsibility isn’t what’s going on. Users, professional developers, and theme sellers are eager to quickly add features without fully thinking through the future implications of the choices they’re making. This leads them to provide gobs of shortcodes and custom post types, even SEO features, that they shouldn’t have in their themes. Those functionalities — which are core to your site and unrelated to its current layout — aren’t things you should rely on any theme for.
Initially, the problem is hidden from view, and so the systems seems to be working better then ever. But when you then go to change your theme and end up with missing data or a broken site, the true cost of the short-term thinking becomes clear. Losing data when you change themes is a bummer of a problem, and one that shouldn’t be happening nearly as much as it is. I’ll grant than an expert can solve it pretty quickly because the data’s not truly destroyed — you can get in touch with us at Press Up if you’ve been burned in that way — but it’s a problem that didn’t need to happen at all.
So beware of themes promising the world: unless you want to stick with that look for the entire life of your site you should probably not rely on some of those features. We’ll talk more about how you can remediate and prevent the problem next week. Until then you can get a sense of what you watch out for in my old post about the Four Thing a WordPress Theme Should Never Do. More recently, Justin Tadlock wrote a great post about a very strongly related topic as well. And of course, comments are open and I’ll be doing my best to answer them.