[buddypress-trac] [BuddyPress] #4639: Add template hierarchy support

buddypress-trac noreply at wordpress.org
Fri Nov 9 20:59:42 UTC 2012

#4639: Add template hierarchy support
 Reporter:  DJPaul       |       Owner:
     Type:  enhancement  |      Status:  new
 Priority:  normal       |   Milestone:  1.7
Component:  Theme        |     Version:
 Severity:  normal       |  Resolution:
 Keywords:  commit       |

Comment (by r-a-y):

 The settings templates are actually named that way because of a bug.  See

 I'm opposed to adding hierarchy for these when devs can use the more,
 `/members/single/home-settings.php` (when on the settings component and
 when the patch is committed)

 Chances are you'll want to style all the settings pages with the same
 outer template.


 '''Paul:''' With what we talked about last week, I spent some time testing
 everything again (except group extensions).

 I'm going to outline the problem
 [https://buddypress.trac.wordpress.org/ticket/4639#comment:33 noted by
 Roger above].

 == Problem ==

 I like theme compat, but want to override a template loaded

 Let's say I like theme compat and want to continue using theme compat, but
 want to merely add or change the markup to a template loaded by
 `bp_core_load_template()` (such as `/members/single/home.php`).

 '''A)''' If I move `/members/single/home.php` from bp-legacy over to my
 current theme (`wp-content/themes/twentytwelve/members/single/home.php`),
 `bp_core_load_template()` is loading this template before theme compat is

 Therefore, I won't see get_header(), get_sidebar(), etc, because bp-
 legacy's home.php is just a template part.  It won't load the skeleton
 template from page.php (or any of the templates from

 The problem is we're referring to home.php in two different use-cases.
 Both as a regular page template and a template part.

 '''B)''' If I move `/members/single/home.php` to my theme's subdirectory
 like `/buddypress/members/single/home.php` or
 `/community/members/single/home.php`, this works as expected.

 It's quite confusing and we're the implementors!

 == Proposed solution ==

 For template hierarchy, we should use `index.php` (or page.php, etc.) as
 our marker instead of `home.php`.

 Then, the hierarchy would look like this:

 $templates = array(
         'members/single/index-' . $user_nicename . '.php',
         'members/single/index-' . $user_id       . '.php',
         'members/single/index-' . $component     . '.php',

 This solves all problems with home.php disambiguation.

 As a reference point, we've already renamed templates in theme compat
 before; the registration templates in theme compat were renamed from
 `/registration/register.php` to `/members/register.php`.

Ticket URL: <https://buddypress.trac.wordpress.org/ticket/4639#comment:35>
BuddyPress <http://buddypress.org/>

More information about the buddypress-trac mailing list