4

I'm trying to add a new tab to my groups on BuddyPress. All the groups will have different content preferrably from the database.

How can I accomplish this?

3 Answers 3

5

There's an example of this on the buddypress forums which is a good place to start looking for answers.

http://buddypress.org/community/groups/creating-extending/forum/topic/can-someone-explain-how-to-add-tabs-to-the-profile-page/

For the sake of answering here though here goes:

bp_core_new_subnav_item( array(
   'name' => 'My Group Page',
   'slug' => 'my-group-page',
   'parent_url' => $bp->loggedin_user->domain . $bp->groups->slug . '/',
   'parent_slug' => $bp->groups->slug,
   'screen_function' => 'my_groups_page_function_to_show_screen',
   'position' => 40 ) );

And the screen function to render the page:

function my_groups_page_function_to_show_screen() {

    //add title and content here - last is to call the members plugin.php template
    add_action( 'bp_template_title', 'my_groups_page_function_to_show_screen_title' );
    add_action( 'bp_template_content', 'my_groups_page_function_to_show_screen_content' );
    bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ) );
}

    function my_groups_page_function_to_show_screen_title() {
        echo 'My Page Title';
    }
    function my_groups_page_function_to_show_screen_content() { 

        // page content goes here

    }
1
  • This does not appear to work (anymore?)
    – MastaBaba
    Aug 22, 2019 at 13:12
1

This worked for me:

function setup_group_nav(){
    global $bp; 
    /* Add some group subnav items */
    $user_access = false;
    $group_link = '';
    if( bp_is_active('groups') && !empty($bp->groups->current_group) ){
        $group_link = $bp->root_domain . '/' . bp_get_groups_root_slug() . '/' . $bp->groups->current_group->slug . '/';
        $user_access = $bp->groups->current_group->user_has_access;
        bp_core_new_subnav_item( array( 
            'name' => __( 'Custom', 'custom'),
            'slug' => 'custom', 
            'parent_url' => $group_link, 
            'parent_slug' => $bp->groups->current_group->slug,
            'screen_function' => 'bp_group_custom', 
            'position' => 50, 
            'user_has_access' => $user_access, 
            'item_css_id' => 'custom' 
        ));
    }
}
add_action( 'bp_init', 'setup_group_nav' );

function bp_group_custom() {
    add_action('bp_template_title', 'my_new_group_show_screen_title');
    add_action('bp_template_content', 'my_new_group_show_screen_content');

    $templates = array('groups/single/plugins.php', 'plugin-template.php');
    if (strstr(locate_template($templates), 'groups/single/plugins.php')) {
        bp_core_load_template(apply_filters('bp_core_template_plugin', 'groups/single/plugins'));
    } else {
        bp_core_load_template(apply_filters('bp_core_template_plugin', 'plugin-template'));
    }

}

function my_new_group_show_screen_title() {
    echo 'New Tab Title';
}

function my_new_group_show_screen_content() {
    echo 'New tab page content';

}
1
  • Good answer, this is helpful and coded well. Dec 9, 2019 at 5:01
0

For your example to work, you need to wrap it in a function like this (that you'll place in functions.php) :

function my_setup_nav() {
    global $bp;
    bp_core_new_subnav_item( array(
       'name' => 'My Group Page',
       'slug' => 'my-group-page',
       'parent_url' => $bp->loggedin_user->domain . $bp->groups->slug . '/',
       'parent_slug' => $bp->groups->slug,
       'screen_function' => 'my_groups_page_function_to_show_screen',
       'position' => 40 ) );
}
add_action( 'bp_setup_nav', 'my_setup_nav' );

and place you rendreing function after obviously.

1
  • This does not appear to work (anymore?)
    – MastaBaba
    Aug 22, 2019 at 13:12

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.