Template Overload from a Plugin
Note: overloading and / or adding templates from plugins can be quite complex. For more detailed discussion and examples, please see:
- Upgrading older plugins that bundle custom templates for BP 1.7
- Using BP Theme Compat in Plugins
- Theme Compatibility & Template Files
The purpose of this page is to provide a simple example of overloading an existing template part. The example shown will allow you to overload the member-header.php
file which creates the BuddyPress profile page header section (avatar, messaging buttons, profile navigation menu etc.) for profile pages where cover images are not used. If you are using cover images on the users profile then the file to overload is cover-image-header.php
. Both of these files are located in plugins/buddypress/bp-templates/bp-legacy/members/single
.
If you’re using BP 1.7 or greater and not using the bp-default theme, you can use this approach…
It consists of 2 files and a template folder structure:
- loader.php
- bp-tol.php
- templates/members/single/member-header-tol.php
loader.php
/* Plugin Name: BP Template Overload Plugin URI: http://philopress.com Description: Load templates from a plugin Version: 1.0 Author: shanebp License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html */ if ( !defined( 'ABSPATH' ) ) exit; function bp_tol_init() { define( 'BP_TOL_DIR', dirname( __FILE__ ) ); require( BP_TOL_DIR . '/bp-tol.php' ); } add_action( 'bp_include', 'bp_tol_init' );
bp-tol.php
// register the location of the plugin templates function bp_tol_register_template_location() { return BP_TOL_DIR . '/templates/'; } // replace member-header.php with the template overload from the plugin function bp_tol_maybe_replace_template( $templates, $slug, $name ) { if( 'members/single/member-header' != $slug ) return $templates; return array( 'members/single/member-header-tol.php' ); } function bp_tol_start() { if( function_exists( 'bp_register_template_stack' ) ) bp_register_template_stack( 'bp_tol_register_template_location' ); // if viewing a member page, overload the template if ( bp_is_user() ) add_filter( 'bp_get_template_part', 'bp_tol_maybe_replace_template', 10, 3 ); } add_action( 'bp_init', 'bp_tol_start' );
member-header-tol.php
Make a copy of
buddypress/bp-templates/bp-legacy/buddypress/members/single/member-header.php
rename it and make some small change so that it’s obvious that it’s being loaded.
Then save it in the folder structure shown above.
That’s it !
And you can overload member-header-tol.php
by placing a copy in your child-theme directory: [theme]/buddypress/members/single/member-header-tol.php