web-dev-qa-db-ja.com

BuddyPress:グループに新しいタブを追加する

BuddyPressのグループに新しいタブを追加しようとしています。すべてのグループは、データベースとは異なるコンテンツを持つことが望ましいでしょう。

どうすればこれを達成できますか?

3
Anders

答えを探し始めるのに良い場所であるbuddypressフォーラムにこれの例があります。

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

ここに答えるためにここに行くが

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 ) );

そしてページをレンダリングするためのスクリーン関数:

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

    }
4
sanchothefat

これは私のために働いた:

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';

}
0
MastaBaba

あなたの例が機能するためには、次のような関数でそれをラップする必要があります(それは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' );

そして、明らかに後にあなたが機能をrendreingすることを置きなさい。

0
user28591