bp_nav_menu_get_loggedin_pages()

Create fake “post” objects for BP’s logged-in nav menu for use in the WordPress “Menus” settings page.

Description

WordPress nav menus work by representing post or tax term data as a custom post type, which is then used to populate the checkboxes that appear on Dashboard > Appearance > Menu as well as the menu as rendered on the front end. Most of the items in the BuddyPress set of nav items are neither posts nor tax terms, so we fake a post-like object so as to be compatible with the menu.

This technique also allows us to generate links dynamically, so that, for example, "My Profile" will always point to the URL of the profile of the logged-in user.

Return

(mixed) A URL or an array of dummy pages.

Source

File: bp-core/bp-core-functions.php

2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
function bp_nav_menu_get_loggedin_pages() {
 
    // Try to catch the cached version first.
    if ( ! empty( buddypress()->wp_nav_menu_items->loggedin ) ) {
        return buddypress()->wp_nav_menu_items->loggedin;
    }
 
    // Pull up a list of items registered in BP's primary nav for the member.
    $bp_menu_items = buddypress()->members->nav->get_primary();
 
    // Some BP nav menu items will not be represented in bp_nav, because
    // they are not real BP components. We add them manually here.
    $bp_menu_items[] = array(
        'name' => __( 'Log Out', 'buddyboss' ),
        'slug' => 'logout',
        'link' => wp_logout_url(),
    );
 
    // If there's nothing to show, we're done.
    if ( count( $bp_menu_items ) < 1 ) {
        return false;
    }
 
    $page_args = array();
 
    foreach ( $bp_menu_items as $bp_item ) {
 
        // Remove <span>number</span>.
        $item_name = _bp_strip_spans_from_title( $bp_item['name'] );
 
        $page_args[ $bp_item['slug'] ] = (object) array(
            'ID'             => -1,
            'post_title'     => $item_name,
            'post_author'    => 0,
            'post_date'      => 0,
            'post_excerpt'   => $bp_item['slug'],
            'post_type'      => 'page',
            'post_status'    => 'publish',
            'comment_status' => 'closed',
            'guid'           => $bp_item['link']
        );
    }
 
    if ( empty( buddypress()->wp_nav_menu_items ) ) {
        buddypress()->wp_nav_menu_items = new stdClass;
    }
 
    buddypress()->wp_nav_menu_items->loggedin = $page_args;
 
    return $page_args;
}

Changelog

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.