BP_Component
We are currently working on a documentation reboot, here’s the new home of the best accurate docs (WIP). You’re very welcome to contribute to it.
The BP_Component class is the basis of getting your plugin initiated into BuddyPress. You extend this class to create custom components. In fact, the core components extend this class to create each core component (members, activity, groups etc.)
Updated documentation for following sections is available here.
This is the members component class which extends BP_Component:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198class
BP_Members_Component
extends
BP_Component {
/**
* Start the members component creation process
*
* <a class="bp-suggestions-mention" href="https://buddypress.org/members/since/" rel="nofollow">@since</a> BuddyPress (1.5)
*/
function
__construct() {
parent::start(
'members'
,
__(
'Members'
,
'buddypress'
),
BP_PLUGIN_DIR
);
}
/**
* Include files
*
* <a class="bp-suggestions-mention" href="https://buddypress.org/members/global/" rel="nofollow">@global</a> BuddyPress $bp The one true BuddyPress instance
*/
function
includes() {
$includes
=
array
(
'actions'
,
'filters'
,
'screens'
,
'template'
,
'buddybar'
,
'adminbar'
,
'functions'
,
'notifications'
,
);
parent::includes(
$includes
);
}
/**
* Setup globals
*
* The BP_MEMBERS_SLUG constant is deprecated, and only used here for
* backwards compatibility.
*
* <a class="bp-suggestions-mention" href="https://buddypress.org/members/since/" rel="nofollow">@since</a> BuddyPress (1.5)
* <a class="bp-suggestions-mention" href="https://buddypress.org/members/global/" rel="nofollow">@global</a> BuddyPress $bp The one true BuddyPress instance
*/
function
setup_globals() {
global
$bp
;
// Define a slug, if necessary
if
( !defined(
'BP_MEMBERS_SLUG'
) )
define(
'BP_MEMBERS_SLUG'
,
$this
->id );
$globals
=
array
(
'slug'
=> BP_MEMBERS_SLUG,
'root_slug'
=> isset(
$bp
->pages->members->slug ) ?
$bp
->pages->members->slug : BP_MEMBERS_SLUG,
'has_directory'
=> true,
'search_string'
=> __(
'Search Members...'
,
'buddypress'
),
);
parent::setup_globals(
$globals
);
/** Logged in user ****************************************************/
// Fetch the full name for the logged in user
$bp
->loggedin_user->fullname = bp_core_get_user_displayname( bp_loggedin_user_id() );
// Hits the DB on single WP installs so get this separately
$bp
->loggedin_user->is_super_admin =
$bp
->loggedin_user->is_site_admin = is_super_admin( bp_loggedin_user_id() );
// The domain for the user currently logged in. eg: http://domain.com/members/andy
$bp
->loggedin_user->domain = bp_core_get_user_domain( bp_loggedin_user_id() );
// The core userdata of the user who is currently logged in.
$bp
->loggedin_user->userdata = bp_core_get_core_userdata( bp_loggedin_user_id() );
/** Displayed user ****************************************************/
// The domain for the user currently being displayed
$bp
->displayed_user->domain = bp_core_get_user_domain( bp_displayed_user_id() );
// The core userdata of the user who is currently being displayed
$bp
->displayed_user->userdata = bp_core_get_core_userdata( bp_displayed_user_id() );
// Fetch the full name displayed user
$bp
->displayed_user->fullname = bp_core_get_user_displayname( bp_displayed_user_id() );
/** Profiles Fallback *************************************************/
if
( !bp_is_active(
'xprofile'
) ) {
$bp
->profile =
new
stdClass;
$bp
->profile->slug =
'profile'
;
$bp
->profile->id =
'profile'
;
}
/** Default Profile Component *****************************************/
if
( !defined(
'BP_DEFAULT_COMPONENT'
) ) {
if
( bp_is_active(
'activity'
) && isset(
$bp
->pages->activity ) )
$bp
->default_component = bp_get_activity_slug();
else
$bp
->default_component = (
'xprofile'
==
$bp
->profile->id ) ?
'profile'
:
$bp
->profile->id;
}
else
{
$bp
->default_component = BP_DEFAULT_COMPONENT;
}
if
( bp_displayed_user_id() ) {
$bp
->canonical_stack[
'base_url'
] = bp_displayed_user_domain();
if
( bp_current_component() ) {
$bp
->canonical_stack[
'component'
] = bp_current_component();
}
if
( bp_current_action() ) {
$bp
->canonical_stack[
'action'
] = bp_current_action();
}
if
( !
empty
(
$bp
->action_variables ) ) {
$bp
->canonical_stack[
'action_variables'
] = bp_action_variables();
}
if
( !bp_current_component() ) {
$bp
->current_component =
$bp
->default_component;
}
else
if
( bp_is_current_component(
$bp
->default_component ) && !bp_current_action() ) {
// The canonical URL will not contain the default component
unset(
$bp
->canonical_stack[
'component'
] );
}
}
}
/**
* Setup BuddyBar navigation
*
* <a class="bp-suggestions-mention" href="https://buddypress.org/members/global/" rel="nofollow">@global</a> BuddyPress $bp The one true BuddyPress instance
*/
function
setup_nav() {
global
$bp
;
// Add 'Profile' to the main navigation
if
( !bp_is_active(
'xprofile'
) ) {
// Don't set up navigation if there's no user
if
( !is_user_logged_in() && !bp_is_user() )
return
;
$sub_nav
=
array
();
$main_nav
=
array
(
'name'
=> __(
'Profile'
,
'buddypress'
),
'slug'
=>
$bp
->profile->slug,
'position'
=> 20,
'screen_function'
=>
'bp_members_screen_display_profile'
,
'default_subnav_slug'
=>
'public'
,
//bp 1.7 requires a default subnav. If no subnav use same slug as parent slug.
'item_css_id'
=>
$bp
->profile->id
);
// User links
$user_domain
= bp_displayed_user_domain() ? bp_displayed_user_domain() : bp_loggedin_user_domain();
$profile_link
= trailingslashit(
$user_domain
.
$bp
->profile->slug );
// Add the subnav items to the profile
$sub_nav
[] =
array
(
'name'
=> __(
'Public'
,
'buddypress'
),
'slug'
=>
'public'
,
'parent_url'
=>
$profile_link
,
'parent_slug'
=>
$bp
->profile->slug,
'screen_function'
=>
'bp_members_screen_display_profile'
,
'position'
=> 10
);
parent::setup_nav(
$main_nav
,
$sub_nav
);
}
}
/**
* Sets up the title for pages and <title>
*
* <a class="bp-suggestions-mention" href="https://buddypress.org/members/global/" rel="nofollow">@global</a> BuddyPress $bp The one true BuddyPress instance
*/
function
setup_title() {
global
$bp
;
if
( bp_is_my_profile() ) {
$bp
->bp_options_title = __(
'You'
,
'buddypress'
);
}
elseif
( bp_is_user() ) {
$bp
->bp_options_avatar = bp_core_fetch_avatar(
array
(
'item_id'
=> bp_displayed_user_id(),
'type'
=>
'thumb'
,
'alt'
=> sprintf( __(
'Profile picture of %s'
,
'buddypress'
), bp_get_displayed_user_fullname() )
) );
$bp
->bp_options_title = bp_get_displayed_user_fullname();
}
parent::setup_title();
}
}
function
bp_setup_members() {
global
$bp
;
$bp
->members =
new
BP_Members_Component();
}
add_action(
'bp_setup_components'
,
'bp_setup_members'
, 1 );