Re: Details About the New Theme Architecture
The way this works is actually really super easy and very, very awesome…
There are a few different variations of ways to do this, and I can see some really imaginative uses of this method doing some really fantastic and super awesome things, so if you’re not already, I suggest you get excited…
I think the way that most people will use this method is with the included BuddyPress Framework theme as a jumping off point. Think of it as the HTML and bare-bones styling to get your site’s root blog and BuddyPress profile/directory pages up and running. It includes all of the normal files you would expect from a typical WordPress theme (single.php, comments.php, page.php, index.php, home.php, attachments.php, etc…) plus it includes all of the theme files for BuddyPress registration pages and components in their own respective folders similar to what bp-member did.
Currently, parent/child template relationships do NOT include the parent template’s style.css, so if you’re making a child theme, you will need to manually include the style.css of your parent theme with an @import rule, but it takes 2 seconds to type in so no big deal.
So that means that your parent/child relationship is really only for .php files until you manually @import a CSS file from another directory.
To answer your question about multiple parent themes, yes and no.
Lets say we have three themes: bp-framework, bp-default, and bp-child.
Each theme/template can only name off one parent, but that doesn’t stop the parent theme/template from having its own parent also. Example: bp-child could name bp-default as its parent, and bp-default could name bp-framework as its parent, and they will recursively overrule each other down the parent/parent/child ladder with the current template winning at the end.
This works well in situations where you might not need a home.php for your child themes. Home.php is a WordPress file for hardcoding the landing page of your blog, and maybe child themes don’t need one. In that case, move home.php into a “bp-home” folder with a style.css that makes the bp-framework its parent and includes the parent style.css, assign bp-home as the theme for your root blog, and you’re done. This way the other blog themes won’t have a home.php for no reason.
Because of this, it’s possible to have themes inherit from multiple other themes if you plan ahead in such a way that allows for this. My experience with this idea and creating my own framework is that it takes a little pre-production planning, but it pays off big time later on.
The other crazy fluke is that parent themes don’t need to be active in the Site Admin area. This means that you could have child themes active for users to select without allowing them to select the parent theme, and still have the parent theme’s files be accessible to the child. This really gives you a better way to control the themes that users have access to and how they work with your custom framework to keep your header/footer/other files in sync.
I personally can’t wait to see what some of the more popular WordPress theme guru’s are able to pull off with the next version of BuddyPress.