bp_nav_menu( string|array $args = array() )
Display a navigation menu.
Description
Parameters
- $args
-
(Optional) An array of optional arguments.
- 'after'
(string) Text after the link text. Default: ''. - 'before'
(string) Text before the link text. Default: ''. - 'container'
(string) The name of the element to wrap the navigation with. 'div' or 'nav'. Default: 'div'. - 'container_class'
(string) The class that is applied to the container. Default: 'menu-bp-container'. - 'container_id'
(string) The ID that is applied to the container. Default: ''. - 'depth'
(int) How many levels of the hierarchy are to be included. 0 means all. Default: 0. - 'echo'
(bool) True to echo the menu, false to return it. Default: true. - 'fallback_cb'
(bool) If the menu doesn't exist, should a callback function be fired? Default: false (no fallback). - 'items_wrap'
(string) How the list items should be wrapped. Should be in the form of a printf()-friendly string, using numbered placeholders. Default:<ul id="%1$s" class="%2$s">%3$s</ul>. - 'link_after'
(string) Text after the link. Default: ''. - 'link_before'
(string) Text before the link. Default: ''. - 'menu_class'
(string) CSS class to use for the <ul> element which forms the menu. Default: 'menu'. - 'menu_id'
(string) The ID that is applied to the <ul> element which forms the menu. Default: 'menu-bp', incremented. - 'walker'
(string) Allows a custom walker class to be specified. Default: 'BP_Walker_Nav_Menu'.
Default value: array()
- 'after'
Return
(string|null) If $echo is false, returns a string containing the nav menu markup.
Source
File: bp-core/bp-core-template.php
function bp_nav_menu( $args = array() ) {
static $menu_id_slugs = array();
$defaults = array(
'after' => '',
'before' => '',
'container' => 'div',
'container_class' => '',
'container_id' => '',
'depth' => 0,
'echo' => true,
'fallback_cb' => false,
'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>',
'link_after' => '',
'link_before' => '',
'menu_class' => 'menu',
'menu_id' => '',
'walker' => '',
);
$args = wp_parse_args( $args, $defaults );
/**
* Filters the parsed bp_nav_menu arguments.
*
* @since BuddyPress 1.7.0
*
* @param array $args Array of parsed arguments.
*/
$args = apply_filters( 'bp_nav_menu_args', $args );
$args = (object) $args;
$items = $nav_menu = '';
$show_container = false;
// Create custom walker if one wasn't set.
if ( empty( $args->walker ) ) {
$args->walker = new BP_Walker_Nav_Menu;
}
// Sanitise values for class and ID.
$args->container_class = sanitize_html_class( $args->container_class );
$args->container_id = sanitize_html_class( $args->container_id );
// Whether to wrap the ul, and what to wrap it with.
if ( $args->container ) {
/**
* Filters the allowed tags for the wp_nav_menu_container.
*
* @since BuddyPress 1.7.0
*
* @param array $value Array of allowed tags. Default 'div' and 'nav'.
*/
$allowed_tags = apply_filters( 'wp_nav_menu_container_allowedtags', array( 'div', 'nav', ) );
if ( in_array( $args->container, $allowed_tags ) ) {
$show_container = true;
$class = $args->container_class ? ' class="' . esc_attr( $args->container_class ) . '"' : ' class="menu-bp-container"';
$id = $args->container_id ? ' id="' . esc_attr( $args->container_id ) . '"' : '';
$nav_menu .= '<' . $args->container . $id . $class . '>';
}
}
/**
* Filters the BuddyPress menu objects.
*
* @since BuddyPress 1.7.0
*
* @param array $value Array of nav menu objects.
* @param array $args Array of arguments for the menu.
*/
$menu_items = apply_filters( 'bp_nav_menu_objects', bp_get_nav_menu_items(), $args );
$items = walk_nav_menu_tree( $menu_items, $args->depth, $args );
unset( $menu_items );
// Set the ID that is applied to the ul element which forms the menu.
if ( ! empty( $args->menu_id ) ) {
$wrap_id = $args->menu_id;
} else {
$wrap_id = 'menu-bp';
// If a specific ID wasn't requested, and there are multiple menus on the same screen, make sure the autogenerated ID is unique.
while ( in_array( $wrap_id, $menu_id_slugs ) ) {
if ( preg_match( '#-(\d+)$#', $wrap_id, $matches ) ) {
$wrap_id = preg_replace('#-(\d+)$#', '-' . ++$matches[1], $wrap_id );
} else {
$wrap_id = $wrap_id . '-1';
}
}
}
$menu_id_slugs[] = $wrap_id;
/**
* Filters the BuddyPress menu items.
*
* Allow plugins to hook into the menu to add their own <li>'s
*
* @since BuddyPress 1.7.0
*
* @param array $items Array of nav menu items.
* @param array $args Array of arguments for the menu.
*/
$items = apply_filters( 'bp_nav_menu_items', $items, $args );
// Build the output.
$wrap_class = $args->menu_class ? $args->menu_class : '';
$nav_menu .= sprintf( $args->items_wrap, esc_attr( $wrap_id ), esc_attr( $wrap_class ), $items );
unset( $items );
// If we've wrapped the ul, close it.
if ( ! empty( $show_container ) ) {
$nav_menu .= '</' . $args->container . '>';
}
/**
* Filters the final BuddyPress menu output.
*
* @since BuddyPress 1.7.0
*
* @param string $nav_menu Final nav menu output.
* @param array $args Array of arguments for the menu.
*/
$nav_menu = apply_filters( 'bp_nav_menu', $nav_menu, $args );
if ( ! empty( $args->echo ) ) {
echo $nav_menu;
} else {
return $nav_menu;
}
}
Changelog
| Version | Description |
|---|---|
| BuddyPress 1.7.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.