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.