bp_setup_nav_menu_item( WP_Post $menu_item )
Add BuddyPress-specific items to the wp_nav_menu.
Description
Parameters
- $menu_item
-
(Required) The menu item.
Return
(WP_Post) The modified WP_Post object.
Source
File: bp-core/bp-core-filters.php
function bp_setup_nav_menu_item( $menu_item ) {
if ( is_admin() ) {
return $menu_item;
}
// Prevent a notice error when using the customizer.
$menu_classes = $menu_item->classes;
if ( is_array( $menu_classes ) ) {
$menu_classes = implode( ' ', $menu_item->classes);
}
// We use information stored in the CSS class to determine what kind of
// menu item this is, and how it should be treated.
preg_match( '/\sbp-(.*)-nav/', $menu_classes, $matches );
// If this isn't a BP menu item, we can stop here.
if ( empty( $matches[1] ) ) {
return $menu_item;
}
switch ( $matches[1] ) {
case 'login' :
if ( is_user_logged_in() ) {
$menu_item->_invalid = true;
} else {
$menu_item->url = wp_login_url( bp_get_requested_url() );
}
break;
case 'logout' :
if ( ! is_user_logged_in() ) {
$menu_item->_invalid = true;
} else {
$menu_item->url = wp_logout_url( bp_get_requested_url() );
}
break;
// Don't show the Register link to logged-in users.
case 'register' :
if ( is_user_logged_in() ) {
$menu_item->_invalid = true;
}
break;
// All other BP nav items are specific to the logged-in user,
// and so are not relevant to logged-out users.
default:
if ( is_user_logged_in() ) {
$menu_item->url = bp_nav_menu_get_item_url( $matches[1] );
} else {
$menu_item->_invalid = true;
}
break;
}
// If component is deactivated, make sure menu item doesn't render.
if ( empty( $menu_item->url ) ) {
$menu_item->_invalid = true;
// Highlight the current page.
} else {
$current = bp_get_requested_url();
if ( strpos( $current, $menu_item->url ) !== false ) {
if ( is_array( $menu_item->classes ) ) {
$menu_item->classes[] = 'current_page_item';
$menu_item->classes[] = 'current-menu-item';
} else {
$menu_item->classes = array( 'current_page_item', 'current-menu-item' );
}
}
}
return $menu_item;
}
Changelog
| Version | Description |
|---|---|
| BuddyPress 1.9.0 | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.