Plugins & Themes

Designing the box

A few years ago, I wrote an article on parent/child theme development on my personal blog. At the time, there were plenty of people both agreeing and disagreeing with me. Of course, few people had been doing parent/child theme development as long as I had either.

The article had focused on the difference between frameworks, parent themes, and child themes. However, it never explained my vision for how all of these things come together, particularly how parent and child themes should work (we’ll leave frameworks out of this discussion).

A few days ago, I sent out emails to people who were interested in creating a child theme for my newest parent theme. The response was overwhelmingly positive. However, I was then in a position in which I had to explain the vision in technical terms to many people who were unfamiliar with my process. I’m not sure how well I explained it; thus, I’m behind the keyboard tapping out the words of this article.

The box

When I refer to designing the box, I’m referring to having a limited set of design options available to the designer. The design options might include things like colors, fonts, and images.

Imagine I handed you the most beautifully-crafted wooden box that you’ve ever seen in your life. Then, I told you that you are allowed to paint this box. You can’t build new drawers on the box. You can’t add wheels to roll it on the ground. You can’t alter the size or shape of the box. You’re simply allowed to paint the box with any design you want. The purpose of this is not to limit you as a box painter. The purpose is to give you the freedom to make the box as beautiful as it can possibly be.

The thing to keep in mind is that you’re not the box carpenter. You’re the box painter.

If you can differentiate between the two, you’re well on your way to understanding my vision for parent/child themes because that’s it in a nutshell.

Why have limits on child themes?

The major reasons for limits are the reasons listed in the post I linked to above. I’m not going to regurgitate that entire post. I recommend reading it if you’re unfamiliar with my philosophy on the subject.

I consider child themes useful for two reasons:

Upgradibility: They allow you to make upgrades to the parent theme without losing customizations.

Skinnability: You can add custom “skins” to an already-existing theme. This particularly applies to publicly-released child themes.

So, if I created a really nice box, you can do things like make a Christmas design for the box. A St. Patrick’s Day design. Or, even have spring, summer, autumn, and winter designs. The box will always look and work like the same box. It might just have a different paint job.

The parent themes of the future

The newest theme I’m working on has taken me nearly three months to complete. I’ve learned a lot about theme development in that time. It has also been a culmination of much of the work I’ve done over the past five or so years.

This theme is just the first theme.

I feel like I’m starting Theme Hybrid anew. This is going to be a drastic change in direction for this site. So, I’m going to let you all on a little bit of the plan.

Keeping with the box analogy, my new theme is the first box in a new line of boxes. This box has an extremely specific purpose. It’s probably not going to be useful outside of that purpose. That’s fine. However, the good news is that I plan on building other kinds of boxes. If this first box doesn’t suit your needs, there’s no need to worry. There’s also no need to try your hand at carpentry. Let me handle that. I’ll craft a box that’s better suited to you. Then, I’ll let you paint it.

Why is all of this important?

Theme development has gotten much more complex over the years. Adding custom functionality to a child theme makes it harder for parent theme developers like myself to upgrade the parent theme without worrying about breaking something you’ve built.

This is why I’ve given child theme authors a very specific and limited set of guidelines. These guidelines allow the use of forward-compatible, future-proof code that shouldn’t be an issue for a very long time (although, you can never be 100% sure of that).

Exactly 50 people signed up to make child themes for this newest theme. My hope is that those who make a child theme are a shining example of this vision (assuming they follow all of my guidelines).

With limited options for child theme designers, it allows me to continue improving the theme. It also allows me to continue perfecting things like handling various screen sizes, non-English languages, right-to-left text, and many other things.

As I build my own child themes for this theme in the coming months, I hope the vision will become clearer. I’m sure I’ll write more on the subject as well.

In the meantime, who’s looking forward to the new theme? Expect a public release within a week.

13 Comments

I like your vision, and your careful definition of what a child theme should be. I’m excited to see the new ‘boxes” (a.k.a. parent themes) you have in store. Will we possibly see themes that are built to support third party plugins, for example an eCommerce theme, or an Event Calendar theme in the future?

Hi Justin,
Its a good thinking, but I don’t agree with your parent child theme ideology (to its full extent), I am thinking the reason for this approach (from yo) is so you can quickly grow your Core Framework without worrying about backwards compatibility, or worrying about breaking any child themes, but I believe providing more boxes means you are more bound, you will have to be extra careful for you parent themes (boxes), as you will know now the responsibility is 100% on you, and its not gonna restrict people still from adding functionality to child themes etc (instead of just working with css / colors etc).

Instead your Hybrid Framework is a unique framework which allows us (dev’s) to just plug and play functionality using extensions system, which you should focus on by providing more useful extensions such as (restaurant related, ecommerce related, membership related and so on), so in child themes we can just enable disable those extensions based on our project needs, and you can’t provide themes for every scenario or every website need, its better known or understood by the developer building the website, and responsibility lies on them not you.

One of the main reasons I am using your Hybrid Core framework is its extension system, as it not only allow me to use existing extensions instead I can build my own and use the same logic for my own extensions and in child theme just enable / disable them according to project needs.

Its just my own ideology, and I am sure everybody have their own point of view about parent / child themes etc.

But as I know (most of you will agree with me), every theme has about 80% same features, functionality, requirements on every new project / website, so its kind of redundent effort from my point of view, that’s the reason we opt for parent / child themes approach.

I think you may have misunderstood what this post was about, so I’ll try to clear up some of it in my reply.

Nothing is really changing at Theme Hybrid on the development side of things. Hybrid Core will still work the same way. Parent theme development will work the same way. This is not some new philosophy that I just came up with. It’s been the standing philosophy since 2010.

The major difference is that there’s going to be a shift in focus from developers to users. I’ve spent the last few years building up a great set of tools for developers (and will continue doing so), but it’s time to put the focus back on regular end users.

It’s only now that I feel like the tools I’ve built and WordPress core has matured enough to fully see my original vision through. It’s only now that I’ve decided to share more details of this vision with others.

I am thinking the reason for this approach (from yo) is so you can quickly grow your Core Framework without worrying about backwards compatibility, or worrying about breaking any child themes,

This has nothing to do with my framework. The framework is merely a development tool for myself and other developers.

I am, however, wanting to more quickly grow the library of themes and make more design options available to normal users, paticularly those users who don’t care anything about frameworks, PHP, etc. They just want a theme that works. That is the target audience of this new theme as well as the themes I have in mind for the future.

but I believe providing more boxes means you are more bound, you will have to be extra careful for you parent themes (boxes), as you will know now the responsibility is 100% on you,

This is no different than what I’ve been doing for the past few years.

and its not gonna restrict people still from adding functionality to child themes etc (instead of just working with css / colors etc).

It’s not meant to restrict people from adding functionality to child themes. I actively encouarge people to do this.

The only people it restricts are me and other people who want to add public child themes to the ThemeHybrid.com as part of the theme collection. That’s something I do have full control over.

which you should focus on by providing more useful extensions such as (restaurant related, ecommerce related, membership related and so on),

I plan to continue adding useful extensions and features to the framework. That’s not going to change.

As for the specific extension ideas listed, I’m about 99% sure those will never happen (restaurant, e-commerce, membership). I consider those outside the scope of what the framework is meant to accomplish.

so in child themes we can just enable disable those extensions based on our project needs,

Extensions really aren’t meant to be enabled/disabled via child themes. Nevertheless, people are always free to do what they want on their own site and build their own system however they want. That’s not my concern anyway.

Thanks for clearing my confusion. I think you were just thinking out loud this time otherwise its been your standpoint since last few years, that’s more comforting as I have found your contributions and plans to meet my needs and liking.

Thanks for the wonderful work you have been doing and will keep doing what you do best. 😉

I has installed theme Unicum and I have some questions, including child theme, but I can not ask them. On http://wordpress.org/support/theme/unique you can not answer the questions. Do you have support free or it only for money?

If only for the money, then maybe we can help each other mutually? I can be translated into Russian, and you help me to configure it.

PS. I’m sorry, I do not speak English, use Google translator online, so there may be problems with understanding.