The Menace of Theme Creep

wordpress-logo-notext-rgbWordPress 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.

why theme-specific shortcodes are a problemHmm, the site worked a minute ago…

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.

themecreepThey were warned about the Single Responsibility Principle, but they wouldn’t listen!

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.

Found this helpful? You'll find us helpful!

WPShout is published by a full-service WordPress-loving constultancy, Press Up. Get in touch with us about your project or business idea, we're knowledgable and friendly.

About the author

David likes learning, solving hard problems, and teaching. He bikes a lot, and lives in (and loves) Colorado. You can find him on Twitter as @davidbhayes and check out everything else he does at davidbhayes.com.

19 Comments

  • I recently read Justin’s post about the features of a theme needing to be put into plugins so the end user can switch out themes without losing content and this post reinforces that perfectly.

    It’s one of the reasons a theme I’m working on to release for sale is going to utilize Justin’s custom post type plugin because if a person who uses my theme ends up wanting to switch out 6 months to a year later, I don’t think they should lost all of their portfolio content, or even worse, have to pay someone extra to extract the codes and recode them into the new theme in order for them to work.

    As more theme developers make use of plugins like that and others, the end user will benefit from a larger selection of themes that they can bounce around to whenever they feel like it. As it stands now, most theme developers are essentially holding the users content ransom and that’s never a good thing.

    • Let me know when you finish that theme. I’ll be more than happy to link to it from the plugin’s page.

    • David Hayes

      Couldn’t agree more Mike, and we’d love to check out the theme too. People trying to build things in a forward-thinking way is great thing and more people should do it.

      • Yes, I just spent about 15 minutes ranting to my girlfriend about why using plugins for content is how it should be done and the theme designers stuck on the “all in one” solution mindset are holding WordPress back. She was amused, yet completely agreed so I take that as a win :)

  • This is the first clear exposition on this that I’ve read; I’m fairly new to WordPress, but it was something I was shocked by in coming across from Drupal, which has a much clearer distinction between data and presentation. The other thing that surprised me was the shrug of the shoulders people much more experienced in WordPress gave when I expressed my surprise. They were very much resigned to this state of affairs.

    Part of the issue to me seems to be a lack of clarity in the way things are marketed. To me, the phrase ‘Premium Theme’ has become code word for ‘tightly coupled package of data types and presentation layer that you will never be able to unpick'; if people used a term that better described what they were marketing, then end users might have a better idea what they were in for.

    Some of the blame must rest with WordPress’ structure. Allowing a presentation layer package (the theme) to define elements that live outside that core responsibility (custom post types etc) seems to me to be half the issue. If WordPress forced developers to separate the two into independant part, when packaging their theme, a lot of the mess would be avoided.

    A suggestion for a post: what tools can you use to unpick the Gordian Knot of a ‘premium theme’? Types (http://wordpress.org/plugins/types/) springs to mind, what others are there?

  • I attended your talk on Theme Creep last October in Boston, and it taught me a ton. I’m actually speaking on WordPress themes for a local WP group, and I borrowed your term – it really describes the issue perfectly. I’ll link to this post in my presentation. (: