Thematic: the final word in WordPress themes

Modular, Extensible

I’m a sucker for clean, well-designed code. I like modular, extensible architectures. I like change.

As a consequence, I struggle periodically with the theme of my website. Not that I am a designer and it is certainly not the most productive use of my time, but what can I say. The point is, I was never really happy with the infrastructure I had at my disposal (I am never happy with the designs that I come up with, so thats another story). Until now.

One of the main barriers in designing a custom theme is that you don’t want to scratch. It is just too much work, and why do it when so many others have already done all the hard work for you? It pays to be lazy! So I have always looked around for good starting points to build up custom themes on.

I started out with Sandbox, a semantically rich theme that allowed extensive customization just using CSS. However, styling via CSS can only get you so far. Sometimes you really do want to make changes to the underlying PHP, for instance.

My next setup involved a base copy of Sandbox on which I layered my changes. In order to accommodate changes to the underlying Sandbox code, I used Mercurial with patch queues (the mq extension). This was much nicer, since it was easy to keep up with changes to the core Sandbox and leverage the work that was being done by others. But it was still cumbersome, since once in a while I would run into conflicts that I would have to merge manually. And it was still not a clean setup.

My ideal setup would have been to keep my changes completely distinct and isolated from the underlying theme. A setup that would allow the underlying theme to evolve independently, while my changes continue to work without any additional work.

Thanks to improved support for child themes in WordPress 2.7, and some fantastic work done by these fine folk, I have realized this ideal setup.

You see, I recently started working on a new website for my wife (it is not live yet, but will be soon). In the process of building her website, I was exploring the so-called WordPress Theme Frameworks. After some playing around, I settled on using Thematic. I started out by cloning the Thematic repository. Locally, I was using git-svn to manage the code changes. Thanks to git-rebase, it was not that hard to keep my changes up-to-date relative to a rapidly evolving Thematic code base.

But soon enough, Thematic had enough hooks, filters and features that I could do all the modifications without modifying a single line of Thematic itself. Now, all my changes are contained entirely within a child theme. How it is possible? Well, Thematic happens to be pretty much the most child-theme friendly framework that I could find. It is really easy to customize.  Several child themes are already available for immediate use, and it is trivial to develop your own child theme.

This blog is going to run on a Thematic child theme. Changes are going to be incremental, but I don’t need to worry about keeping them in sync with Thematic, and I get to leverage the improvements being done in the core them for free! You can also take a sneak peak at how we are using Thematic for my wife’s new website


  1. Shawn

    I couldn’t agree more. I bought Thesis a while ago and love the framework concept rather than the set theme. I’ll have a look at thematic, looks really good.

  2. RaiulBaztepo

    Very Interesting post! Thank you for such interesting resource!
    PS: Sorry for my bad english, I’v just started to learn this language ;)
    See you!
    Your, Raiul Baztepo

  3. Oscar

    Thematic is great, I really like it and I’m using it for a couple of websites. Its much easier to edit that other themes but it does require a bit of a learning curve. Especially if you aren’t experienced with themes or xhtml and css. I like how you’ve shaped this theme so far, the header image fits perfectly with the clean layout. It’d be interesting to see how else you decide to customize it.

    BTW, surabhisaraf is looking great nice design.

  4. Ciobi

    I started playing with Thematic a couple of day ago. Looks like a great tool.

    I’m not sure however about how to approach my WordPress implementation, while maintaining compatibility of future Thematic update.
    I need to create a hierarchal Page based navigation which is essential composed of 3 layers: Top of the hierarchy – Domain pages (the navigation menu is composed of this), second level – Projects, third level – Project subsections. The project pages and project subsections pages require to contain a Subsection navigation within that project.

    Now, in order to accomplish this I created two custom page templates for each type of page (project and subsection) and put them in the child theme directory. Within them I added the php code required to create the project navigation.
    Is this right? Won’t this kinda destroy the idea of upgrade compatibility (if the page.php file – on which the custom templates are based – changes in thematic future upgrades)? Should I have done this differently? (maybe using the child theme function.php file – dunno how however).

    • Diwaker Gupta

      @Ciobi: I think you’ll find a lot more help on the Thematic forums. If I read correctly, it seems to me that you should be able to do this kind of organization by just using hierarchical categories. Then for each category, you can provide a custom page template. In general, what you have done should be upgrade safe — if you look at the page.php in thematic, it is mostly comprised of library calls. Thematic has extensive actions and hook filters that you can leverage in your own page templates.

  5. danny

    Interesting, I just insalled thematic and am playing about. Definitley a different way to approach theming! Can I ask what made you go with the Irresistible theme for surabhisaraf in the end?

    • Diwaker Gupta

      @danny: Actually we did two initial drafts using Thematic. In the end, we went with Irresistible because modifying it to get what Surabhi wanted was easier than building a Thematic child theme.

Leave a Reply