One question that crops up every once in a while from my theme users is how to create a WordPress grandchild theme. Most of the time, a user asks, “How do I update my child theme? Do I need to create a grandchild theme?”
The idea of parent/child themes became popular because it allowed the parent theme to be updated while keeping customizations intact within a child theme. That system works great. The problems begin when a child theme is updated. Users tend to want to take advantage of the update, but they can’t upgrade because they’ve made customizations.
Essentially, we’ve just added another layer to the preexisting problem.
But, that’s not where the real problem is at. The problem is confusion over what frameworks, parent themes, and child themes are. Users aren’t to blame for this confusion. Theme developers are at fault here (even me), and I’m going to attempt to clear things up.
Advanced parent themes are not frameworks
I’m going to avoid calling any other “framework” themes out and tell you that my own Hybrid theme is not a framework, at least not in the traditional development framework sense. It’s an advanced parent theme. Admittedly, I’ve called it a “framework” before because I’ve just been following the crowd.
What should we call the Hybrid theme? Simple. It’s a parent theme.
One thing we should definitely not confuse are the terms “framework” and “parent theme.” These two are not interchangeable. That’s where a lot of the confusion stems from.
What is a theme framework?
This is the question I most wanted to answer because I’ll be releasing a framework for theme developers soon (see below). But, I can’t do that with all this confusion floating around the community.
A theme framework is a set of conventions to use for developing WordPress [parent] themes.
Yes, that’s a bit vague, but frameworks can exist for all kinds of different purposes. This can be something like an elegant template engine (Carrington Core is really good for this) or a set of helper functions for more quickly building a theme.
It is not a theme though. You can’t simply drop it in your WordPress themes directory and expect it to work.
Frameworks are for theme developers. They offer a set of standards (or whatever features) for theme developers to use in creating their own themes. They’re a set of functions/features created to aid development.
What is a parent theme?
Nearly all WordPress themes are parent themes. Only those called “child themes” are not parent themes.
Theme developers create parent themes for users to download and install on their sites. My Hybrid theme is, without a doubt, a parent theme. Parent themes should house the theme design, functionality, and the templates required for running the theme in WordPress.
You can use a framework to build a parent theme, but the framework is not a parent theme itself.
What is a child theme?
A child theme is something users should be creating so that they can customize the look and functionality of their site. The child theme inherits all of its functionality from a single parent theme.
When a theme developer creates a child theme, things become problematic because that child theme might eventually need an update. If you’re a theme developer and are building a child theme with a 20kb functions file and five or six custom templates, I can assure you that you’re doing it wrong. I’ve even had to tell myself this.
What you should really be creating is a parent theme. Child themes from theme developers should be nothing more than a stylesheet and a few functions. This idea of releasing advanced child themes just creates the same problem child themes were meant to solve: upgradability.
I’ve got over two years of experience at this point in dealing with parent/child themes if you need a reason to take my advice on this.
How frameworks work
Confused yet? Let me break this process down for you and explain how it should work.
- Frameworks come packaged within a single folder.
- Developers drop the framework folder into a new parent theme and load the framework.
- Users create a child theme based on the parent theme to house their customizations, allowing both the framework and parent theme to be updated.
Here’s a diagram for reference:

Users should only ever have to worry about creating a child theme. This will allow them to make modifications without losing them when the parent theme is updated. They shouldn’t have to worry about all the other stuff.
As you can see by now (I hope), the question of grandchild themes has been completely averted because theme developers shouldn’t be adding advanced functionality (that might need future updating) within child themes.
Doesn’t Hybrid break these rules?
The Hybrid parent theme doesn’t break the rules. A couple of the child themes? Definitely. If I could afford a time-traveling machine (and if they existed), I’d zip back a year or two and turn a couple of those child themes into parent themes instead. We all have to learn from our mistakes, and I can freely admit that I’ve taken the wrong route on occasion.
So, I’m going to give you a real-world example of everything I’ve been talking about and how it could’ve been avoided with one of my own themes.
Hybrid has a child theme called Hybrid News. This child theme has a few extra features that make it more advanced than its parent theme. One good example of a problem was when WordPress 3.0 launched with a new menu system (which I love). The Hybrid News child theme has an extra navigation menu that’s not present within its parent theme.
The problem: How do you upgrade the Hybrid News child theme to use the the new nav menu system for its extra menu?
You certainly can’t expect users to upgrade the child theme and lose all of their customizations. To solve this particular problem, I wrote a tutorial on making the switch to the new system. But, it was just a way to avoid the larger problem at hand.
The solution should’ve been: Make Hybrid News a parent theme. This would allow it to be upgraded and users to keep their customizations intact.
If you’re a theme developer with a lot of advanced child themes, you may be thinking that you’ve got this problem all figured out. You may have already come up with plenty of nifty solutions for avoiding these types of problems. But, no one can foresee what new things will come in later versions of WordPress to conflict with those solutions.
Introducing Hybrid Core: A theme framework
Last year, I mentioned that I’d release Hybrid Core to the public for download. Unfortunately, that release never came out. I wanted some more time to perfect it, which turned out to be around a year worth of extra time.
Hybrid Core will be a theme development framework for use by other theme developers. What this means is that any theme developer will be able to download this and build parent themes with an awesome framework behind them. Yes, I’m essentially giving you the keys to the Theme Hybrid kingdom.
Hybrid Core is currently packaged within my Hybrid parent theme. It is used to handle the “logic” behind how the theme runs. Theme developers will be able to load this framework and build themes using the set of conventions provided by the framework. All of the HTML, CSS, and extra functionality will be left up to you.
In the next month or two, I’ll be putting the finishing touches on this. I’m still moving some stuff around that’s specific to the Hybrid parent theme and getting it out of the way.
It’d be awesome to see many great themes built off this framework. It’s a project that I started building in June 2008, so a lot of work and testing have been put into it. The next theme I build will be a parent theme based off it, so you’ll have a good, working example of how to use the framework.
Just in case you were wondering if building a “grandchild” theme is actually possible, the answer is no, at least not by default. And, I hope to never see the day it happens.

Sounds like it would be more fittingly packaged as a plugin, upon which a Parent Theme would depend (and perhaps gracefully degrade?). That way, it can be auto-updated using the standard WP upgrade mechanism.
Since, in PHP, dependency has nothing to do with directory structure, having it separate, rather than included in the theme file, would be the logical thing to do, no?
Essentially, yes, it could be a plugin. I’ve even considered going down this route in the past. But, from a user’s perspective, it’d be a bad idea. I wouldn’t want to create a parent theme then tell the user that they must install a plugin. Users shouldn’t be concerned with the framework. They don’t even need to know their parent theme is using a framework.
Facing more-or-less the same problem, I’ve took a different approach: include the theme in the plugin and use the register_theme_directory function. I’ve yet to check, though, all the child theme related issues —Codex is not quite clear on the themes not in theme folder and child themes, and checking the code is not straightforward: you’ve got to crawl through functions that parse the style.css… Sometimes I didn’t know even where to start from.
It’d be great if themes could register plugins the same way plugins can register themes…
I have to agree with the suggestion that a “drop-in” Theme framework is less-than-ideal. Not only does the Theme developer have to keep the parent Theme updated, but also then has to ensure that the Framework version remains up to date.
What is *really* needed is a solution that allows for the Framework to stay updated.
But, I still don’t completely understand the benefit gained by developing a Theme based on a Framework? Is it standardization of Theme hooks and functions? Something else?
For Hybrid Core (and I know Carrington has this as well) , it’d be as simple as knowing how to use Subversion. A quick
svn upcommand would do the trick.It depends on what the particular framework does.
+1 for the plugin idea.
Users could download a “theme”, and if they want to add all the funky “Hybrid Core” features, they can install the plugin on top. That way users have an option between a complex framework powering their parent theme and a super skinny theme.
The Hybrid Core features are very much intertwined with the development of the theme. It’s definitely not a “user” thing, so I can’t really see the plugin idea working out so well.
Imagine using the Hybrid parent theme minus all its features. It’d be the worst theme in existence.
I think developers will better understand why I wouldn’t want to release this as a plugin once Hybrid Core is released and they start using it.
Hybrid may be an awful theme minus the features, but that doesn’t mean a theme couldn’t be made which functioned fine without the features, but worked even better with it.
A bonus of the user developing from a “Hybrid core plugin” is that if the users theme were never updated, they could still get the updates for the plugin and so gain new features as they were added. They wouldn’t be tied to the developer of their parent theme doing the upgrades.
Most updates (in plugin form) would be meaningless to users unless they were bug fixes.
I’ve given this about two year’s worth of thought, development, and usage and believe the plugin route to be the wrong route, at least for this framework. Once it’s released and people start working with it, I would think most devs will see why it’s not a plugin.
Whether it becomes a plugin is simply not a question that’s on the table though. If I change my mind in six months or a year, I’ll cross that bridge then.
One of the problems I can see with releasing it as a plugin, is that it could tie you down to providing too much backward compatibility to support themes which weren’t updated to accommodate changes in the framework. Whereas locking it into the theme places the onus of updating onto the theme developer.
I guess that depends on the changes. If you added a new shortcode, or improvements to the widgets/interface, then those changes would be automatically rolled in via the plugin.
Either way, I’d likely to use the new framework and am quite pumped about seeing it out in the world
This sounds absolutely amazing! I would much rather build ‘real/parent’ themes based on Hybrid rather than making child themes that sometimes break when updating the parent theme (Hybrid).
I can’t wait for this to come out. Thanks for your fantastic work!
That’s what I’ve found a lot of people would like to do. While the Hybrid parent theme has a lot of great advantages with solid markup and templates for everything, sometimes you just need more control over these things.
If I understand well, you’re taking the route of, say, the type of frameworks such as codeigniter, etc…makes sense really.
Yes, it’s something like CodeIgniter for WordPress themes.
“Something like Codeigniter” an MVC structure? Or at least better separation of code and design, the WordPress method of includes for templates leaves a lot to be desired.
I have completely discarded this method and replaced it with a view based structure this allows reuse of the same code multiple times within a page and change the data that they receive.
Currently it is plugin based as i am still undecided is it would make more sense as theme, a plugin is still a lot more universal that a theme IMO ans it provides more flexibility to use it in any theme
“Something like CodeIgniter” in terms of the question asked by Paul. I have no idea what that particular framework does.
OK, I understand.
I guess i was just hoping for the HOW they work, as opposed to the WHAT frameworks like codeigniter do, it would be really nice to have the ability to extend a “theme class” customizing what you I need…
What do you think???
All frameworks are going to work differently, so I can’t give a general answer to this. But, I can give you an idea of how Hybrid Core will work. I won’t go over it in complete detail because I’ll be writing on that more in the future.
Hybrid Core has its own template hierarchy. It’s mostly the same as the WordPress template hierarchy but with some improvements that allow tons of flexibility. It also supports an atomic/modular template system (like Carrington) if theme developers want to take that route.
There’s also a built-in atomic hook system based closely on the conditional tags WordPress offers. We’ve been taking advantage of this in the Theme Hybrid community for quite some time. Think of it as a way to allow users to use conditional tags without having to know what they are.
Then, it has a lot of other features that developers can mix and match depending on their needs. They just have to load them like so:
There’s probably about 15 or so features that can be added such as breadcrumbs, pagination (similar to WP Pagenavi), and an SEO component.
PS: you need some “Share this post” buttons here
I think, this step is not a good idea. Adding another layer to this: Website -> WordPress -> Themes -> Framework -> Child theme will confuse people. Majority of people don’t understand completely the framework/child theme idea and you want to add another layer. Whatever you say for the Hybrid, at the end it is a Framework. Now you want to add another layer – Child Theme Framework ( Parent Theme). Imo, it is a better idea to provide hotfixes for the updated Child Themes and build the child theme the way that updated version will not effect the html/css output, where the customizations actually are made.
Sounds great in priciple, Justin – thanks in advance…
The (arguebly) added complexity is presumably a necessary evil – and the audience is presumably capable…
Regards
j
Yes, the audience would certainly be capable of understanding how to use it.
The average user wouldn’t even know about the framework part, so there’d be nothing for them to be confused about. I have a community of over 20,000 user at Theme Hybrid who seem to understand parent/child themes just fine.
Theme developers looking for a hardcore framework shouldn’t be confused. Carrington has been doing this for a long time. Heck, even WooThemes has its own framework just like this. It’s not available for public download, but it’s still a framework.
I’m not wanting to add another layer at all. The Hybrid parent theme has been running off the Hybrid Core framework for two years. I’m simply making Hybrid Core available to other theme developers.
Deleted by the administrator. Instead of marking this as spam, I need to keep it to to preserve the comment order and hierarchy. Seems like a WordPress bug.
I think this is my favourite bit of spam ever.
yeah baby!
I wonder where our comments will go once I delete the top-level spam comment. Such a shame that I’ll be deleting it as it looks like a lot of effort went into writing it.
Well, that looks like a WordPress bug. Deleting a top-level comment with two levels below causes them all to be pushed to the end of the comment list and lose their hierarchy.
Edit: Apparently restoring it fixes the hierarchy.
@Kevinjohn Gallagher,
Wholeheartedly agreed. It’s just so darn positive;)
@Justin,
Great write up on the differences, and the complex issue here.
Thanks. I was just doing my best to organize everything in an understandable way. Plus, I needed a good explanation about the differences before I released Hybrid Core as I know the release will confuse some people.
Your solution seems like a good one. It has a positive impact for hybrid in terms of bringing in more “sophisticated” theme developers into the hybrid community who have all the benefits of a solid architecture and clear blueprint for theme development to follow that is tried and tested following your years of experience in this area.
On a slightly seperate note it has often struck me how “cheap” the hybrid support is when I compare it with all the other monthly / anual expenses that my online life incurs !
As the hybrid community grows I can imagine it becoming increasing difficult for you to maintain the amazing support level that you have always offered. There may simply not be enough hours in the day.
Returning to my firts point about bringing in theme developers whom are creating themes on the hybrid arcitecture you have a ready made source of additional expertise who could potentialy share some of the workload.
One method you could adopt for this might be as follows….
Change the pricing model for hybrid support perhaps to include the following
1. An cheap introductory 7 day support for say $5 which provides a low barrier to entry and gets people through the door and experiencing how good the support is. It also gets them on your mailing list so if they dont take up the “full support” option at the end of the trial you can email them over period of time to encourage them in future.
2. Then offer the normal support as it is at the moment but at a higher price $49 per year for example.
3. Support your theme developer community financially by creating an affiliate program that meant they they got paid say $5 or $10 per month for each end user they brought to the hybrid paying support forum. (might you not also offer this out to end users too ?)
4. Activly encourage these experienced and technical theme developers to join in providing the support to the community which would reduce your workload in this area.
Justin, just some thoughts ! But above all I would like to thank you for all the amazing work that you do. And the tireless hybrid support that you give me !!
Skywalker
stupid me ! I just read back through my comment – should be $5-$10 for each referred member rather than per month !!
Thanks for all your thoughts on Theme Hybrid.
That’s pretty much the goal.
Very explanatory article Justin.
Considering all elements including but not limited to the database and WordPress itself, then what is WordPress? Would it be the ‘engine’ or would that not be the actual ‘framework’?
I just call WordPress the engine, platform, or CMS.
An additional thought – We must somehow ensure transparency towards end-users. i believe it’s highly important that all speak the same language, know what we are working with, what to update etc.
Justin, what are the main features you anticipate people will weigh to decide whether to build a parent theme or child theme? Menu location? Front page setup?
Built in widgets?
End users should always build a child theme. Developers/designers should only release a child theme if they’re making a new design based off a parent theme. If they’re overwriting a bunch of templates and creating a lot of custom functions, it might be best to create a parent theme.
Let’s suppose there’s a new parent theme called “Super Theme.” It has everything you want, but you want to modify the style and plug in a few functions. You should create a child theme of Super Theme.
Now, let’s suppose you wanted to create a theme with its own markup using something like the 960 CSS Grid System. You would create a new parent theme. It’d be pointless to try and use a preexisting parent theme for such a change.
Justin, reading through your post, I’m a little nostalgic about the earlier days of WordPress theming. Back then, things were so simple: you put up a parent theme, and hoped that someone likes it. Instead of trying to write a few thousand words on the subject, I guess what I’m trying to say is that the line between “theme” as a visual design and “theme” as “a bunch of plugins that aren’t really plugins” has been blurred so much it’s almost ridiculous.
So few drop-in Parent Themes are released with just widget definitions and core functions anymore, and yet for so many years we went along just fine and were able to design sites quite well without a bajillion new functions in the functions.php file.
This old dog is frustrated. That’s pretty much what my comment amounts to.
Actually, I long for those days too. And, despite the complexities described in this post, I’m hoping to move back in that direction from an end-user perspective. As an end user, you should install a theme and not have to worry about terms like “framework.”
The one thing I didn’t like about the good ol’ days was the lack of child theme support. WordPress is always bringing new features to the table and my theme users always want to use them. Child themes make that easier, and I’m hoping to make the child theme process as easy as possible for users.
Anything that makes the developer’s job easier is most welcome. Look forward to checking it out Justin.
One great thing WordPress added in 2.9 (I think) was the
add_theme_support()function. Any theme developer that knows how to use it should love the flexibility Hybrid Core will offer. You’ll be able to pick and choose what features you want loaded.Looks like a good system for you personally, but you may have lost the battle at large for the word “framework.” Seems like everyone’s using it these days as a synonym for “Big, Advanced Parent Theme.”
That said, given how much I’ve learned from you by digging through Hybrid’s files in the past, I look forward to Hybrid Core and hope to make a theme or two with it.
I’m thinking of following Alex King’s decision and just calling it the “Hybrid Platform.”
It might be worth mentioning that a true ‘grandchild’ theme simply doesn’t exist, and isn’t possible with the current codebase unless you code a theme to include CSS or JS from an existing source outside of the parent and child.
We run into a similar situation with BuddyPress, where we recommend making child themes run off of the ‘bp-default’ theme. If you have a custom theme, obviously that won’t really work as expected, so we developed the Template Pack plugin to help assist with converting an existing theme into a proper ‘bp-default’ child theme. But, if you wanted to inherit CSS, JS, and HTML from both ‘bp-default’ and Hybrid, you’re stuck in a rut and need to get your hands dirty.
I think this is a circumstance where parent/child themes satisfy 98% of WordPress users, but it’s the 2% that see the caveats and need to tip-toe around them.
I should probably add a note to the post mentioning that about grandchild themes.
I get a lot of those questions about BuddyPress too, so I assumed you guys had run into similar situations where users wanted to make child themes of something that was already a child theme.
A much larger percentage of Hybrid users are extremely tech-savvy. Many of them are theme developers (generally freelancers or Web design businesses). So, they tend to see the problem clearly. Hybrid Core will be a way for them to gain a lot more flexibility and not have to worry about it.
I would love to see an alpha copy for testing.
Also there are ways to update the internal framework when nested inside “the/a” parent theme, I’m actually looking into this for a project.
I’m probably going to release a beta copy on the Theme Hybrid forums in the next week or so.
Hi, justin.
I can’t wait to test the Hybrid Core bata copy.
Can I reprint this article to my blog after translation into Japanese?
I would prefer it not to be reprinted elsewhere. An excerpt with a link back to the article and instructions on how to translate it (if needed) would be the best option.
Hi there Justin,
Let me say that this article cleared up a whole lot for me and I thank you for this… the idea of parent/child themes is a bit of a head scratcher for many and I think you hit the nail on the head with this one.
I’m glad it cleared some things up. I’ve got a few things lined up in the coming months that will really smooth out the complex ideas presented in this post even more.
Also, I just started looking through you site. It looks like you’ve got some good articles.
Hi Justin, do you release kind of independent software like codeigniter for your framework php language? it’ll be interesting to hear update for this awesome idea
Do you mean like extensions to the framework? I don’t know anything about how CodeIgniter works.
I’m very keen on this idea, thanks Justin
I’ve used Hybrid to develop a theme which I will use on all my sites, but of course I want them all to be slightly different: no two sites are identical. I’m getting round the problem by testing for specific style sheets etc but it would be much neater to make my theme a parent rather than a child.
I use very little – I think – of the Hybrid theme other than the core so this really suits me.
Yeah, I think I remember you bringing this up in the forums. Using a child theme of the Hybrid parent theme wasn’t the best solution. Having your own parent theme with multiple child themes would be much easier to work with.
@Justin – Brilliant post.
I thought maybe you had given up on releasing the framework as it’s own entity, but thankfully it seems not
This is exactly the sort of tool I’ve been look to use for a while now. Thanks for continuing with the project and I can’t wait to dig into it and hopefully use it in a few of my own projects.
I did sort of semi-give up on it for a while. I kept coming back to it and saying, “Well, feature X could just as easily be done with a child theme of the Hybrid parent theme.” Another theme I’ve been working on really kick-started the development of this again. It’s been giving me a real-world use to test it with.
There’s some things you just can’t do with a child theme, or at least not without jumping through a lot of hoops or pretty much replacing all the templates with child theme ones anyway. So the introduction of a real framework like this will be an incredibly helpful way to give an immediate boost in quality to what would otherwise be a plain old run of the mill theme.
This is neat. I just hope it doesn’t delay that awesome forum plugin for a year too. That’s what I keep checking back on for updates.
The forum plugin is something I’m doing in my spare time right now. Development of the Hybrid framework is always a priority over everything else. With that said, a beta of the forum plugin should be out within a month.
AWESOME news! I’m up for trying a beta! Thanks Justin!
Hey Justin!
Just 2 quick questions by me, for what i whould love to see from a framework.
1) Could we use template system for custom post types? For example, if we develop a custom post type named Movies, could we also make a template called movies.php?
2) Comment form, would be an extended template system?
1) You could create a Page template like this but not a root-/index-type of template. This needs to be supported within the WordPress core.
2) I’m not sure what you’re asking.
Finally somebody discussed this. Thanks
I’ve always kind of felt like this has been the big elephant in the room that no one is really discussing.
Looking forward to the release of Hybrid Core. I think it’s a great idea to allow developers to “package” the core functionality/logic of Hybrid in their own parent theme. Thanks for your hard work and offering the fruits of your labor to us all. Can’t wait to give it a try – how’s it coming along?
The initial version is actually already available:
http://svn.locallylost.com/themes/hybrid-core/tags/0.9
I haven’t had the time to document how to use it yet, so I haven’t “officially” released it.
But, many site has said that you Hybrid Theme is Framework
http://www.problogdesign.com/wordpress/a-comparison-of-6-popular-wordpress-frameworks/
http://www.wptavern.com/comparisons-between-most-popular-theme-frameworks
But, overall I am agreed with our explanation
This is a great article! Take this from a WordPress theme/plugin developer.
Thanks for this thorough explanation of the various terms. I had always thought the word ‘framework’ referred to a parent theme that was loaded up to the gills with options in the dashboard. Now, using this word as Justin advises, is there a better term for such parent themes that have options up the whazoo? Incidentally, I just purchased exclusive membership into Theme Club.