Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
06/13/2013 01:27:01 AM (13 years ago)
Author:
boonebgorges
Message:

Introduces template hierarchy for top-level theme compat templates

The "top-level" template is the outermost template included by theme
compatibility. As of BuddyPress 1.7, a stack of template names is checked when
BP decides which top-level template to use: plugin-buddypres.php,
buddypress.php, community.php, etc. (See bp_get_theme_compat_templates().)

This changeset introduces an additional level of template hierarchy, so that
themes may provide top-level templates that are specific to the current
component, such as blogs/index-directory.php, or specific to the current item,
action, or status, such as groups/single/index-id-{$group_id}.php. In this way,
BP's top-level template hierarchy becomes more flexible for theme devs, and
more closely parallels the template hierarchy used by WordPress.

Note that this changeset only implements hierarchy for the top-level templates.
Inner template parts may receive a parallel hierarchy in a future version of
BuddyPress.

Fixes #4639

Props r-a-y

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-members/bp-members-screens.php

    r7068 r7212  
    267267 *
    268268 * This class sets up the necessary theme compatability actions to safely output
    269  * group template parts to the_title and the_content areas of a theme.
     269 * member template parts to the_title and the_content areas of a theme.
    270270 *
    271271 * @since BuddyPress (1.7)
     
    299299                        do_action( 'bp_members_screen_index' );
    300300
     301                        add_filter( 'bp_get_buddypress_template',                array( $this, 'directory_template_hierarchy' ) );
    301302                        add_action( 'bp_template_include_reset_dummy_post_data', array( $this, 'directory_dummy_post' ) );
    302303                        add_filter( 'bp_replace_the_content',                    array( $this, 'directory_content'    ) );
     
    311312                        do_action( 'bp_members_screen_display_profile' );
    312313
     314                        add_filter( 'bp_get_buddypress_template',                array( $this, 'single_template_hierarchy' ) );
    313315                        add_action( 'bp_template_include_reset_dummy_post_data', array( $this, 'single_dummy_post'    ) );
    314316                        add_filter( 'bp_replace_the_content',                    array( $this, 'single_dummy_content' ) );
     
    318320
    319321        /** Directory *************************************************************/
     322
     323        /**
     324         * Add template hierarchy to theme compat for the members directory page.
     325         *
     326         * This is to mirror how WordPress has {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
     327         *
     328         * @since BuddyPress (1.8)
     329         *
     330         * @param string $templates The templates from bp_get_theme_compat_templates()
     331         * @return array $templates Array of custom templates to look for.
     332         */
     333        public function directory_template_hierarchy( $templates ) {
     334                // Setup our templates based on priority
     335                $new_templates = apply_filters( 'bp_template_hierarchy_members_directory', array(
     336                        'members/single/index-directory.php'
     337                ) );
     338
     339                // Merge new templates with existing stack
     340                // @see bp_get_theme_compat_templates()
     341                $templates = array_merge( (array) $new_templates, $templates );
     342
     343                return $templates;
     344        }
    320345
    321346        /**
     
    350375
    351376        /**
     377         * Add custom template hierarchy to theme compat for member pages.
     378         *
     379         * This is to mirror how WordPress has {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
     380         *
     381         * @since BuddyPress (1.8)
     382         *
     383         * @param string $templates The templates from bp_get_theme_compat_templates()
     384         * @return array $templates Array of custom templates to look for.
     385         */
     386        public function single_template_hierarchy( $templates ) {
     387                // Setup some variables we're going to reference in our custom templates
     388                $user_nicename = buddypress()->displayed_user->userdata->user_nicename;
     389
     390                // Setup our templates based on priority
     391                $new_templates = apply_filters( 'bp_template_hierarchy_members_single_item', array(
     392                        'members/single/index-id-'        . sanitize_file_name( bp_displayed_user_id() ) . '.php',
     393                        'members/single/index-nicename-'  . sanitize_file_name( $user_nicename )         . '.php',
     394                        'members/single/index-action-'    . sanitize_file_name( bp_current_action() )    . '.php',
     395                        'members/single/index-component-' . sanitize_file_name( bp_current_component() ) . '.php',
     396                        'members/single/index.php'
     397                ) );
     398
     399                // Merge new templates with existing stack
     400                // @see bp_get_theme_compat_templates()
     401                $templates = array_merge( (array) $new_templates, $templates );
     402
     403                return $templates;
     404        }
     405
     406        /**
    352407         * Update the global $post with the displayed user's data
    353408         *
     
    414469
    415470                // Setup actions
     471                add_filter( 'bp_get_buddypress_template',                array( $this, 'template_hierarchy' ) );
    416472                add_action( 'bp_template_include_reset_dummy_post_data', array( $this, 'dummy_post'    ) );
    417473                add_filter( 'bp_replace_the_content',                    array( $this, 'dummy_content' ) );
     
    419475
    420476        /** Template ***********************************************************/
     477
     478        /**
     479         * Add template hierarchy to theme compat for registration / activation pages.
     480         *
     481         * This is to mirror how WordPress has {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
     482         *
     483         * @since BuddyPress (1.8)
     484         *
     485         * @param string $templates The templates from bp_get_theme_compat_templates()
     486         * @return array $templates Array of custom templates to look for.
     487         */
     488        public function template_hierarchy( $templates ) {
     489                $component = sanitize_file_name( bp_current_component() );
     490
     491                // Setup our templates based on priority
     492                $new_templates = apply_filters( "bp_template_hierarchy_{$component}", array(
     493                        "members/index-{$component}.php"
     494                ) );
     495
     496                // Merge new templates with existing stack
     497                // @see bp_get_theme_compat_templates()
     498                $templates = array_merge( (array) $new_templates, $templates );
     499
     500                return $templates;
     501        }
    421502
    422503        /**
Note: See TracChangeset for help on using the changeset viewer.