Buddy Press限制编辑用户的能力

时间:2018-11-22 作者:DevNik

我正在尝试修改我的插件的Wordpress功能“edit\\u users”。在我的情况下,一些用户角色应该能够修改具有特定角色的其他用户,但不能修改所有其他用户。

因此,我只是将“edit\\u users”功能添加到我的自定义角色“Primary Trainer”中。现在他可以编辑每个用户。我可以使用“edit\\u user”上限检查每个显示的用户。

然后,我通过以下方式过滤此功能:

add_filter( \'map_meta_cap\',array($this,\'sa_classbook_map_meta_cap\'),10,4); 
function sa_classbook_map_meta_cap( $caps, $cap, $user_id, $args ) {

    switch( $cap ){
        //Some Roles can only edit some Profiles
        //Primary Trainer and Secondary Trainers are allowed to change Data of Participants but they cant change other Trainers Data
        case \'edit_user\':
            if( isset($args[0]) && $args[0] == $user_id )
                break;
            elseif( !isset($args[0]) )
                $caps[] = \'do_not_allow\';
            $other = new WP_User( absint($args[0]) );
            //If the Current User is not the Admin
            if(!current_user_can(\'administrator\')){
                //If the shown Profile is an Primary Trainer, an Secondary Trainer or the Admin it should\'nt be editable
                if(!in_array( \'sa_classbook_participant\', (array) $other->roles)){
                    $caps[] = \'do_not_allow\';
                }
            }
            break;
        default:
            break;
    }
    return $caps;
}
对于后端,它可以完美地工作,请参见图片:enter image description here

但现在是巴迪出版社:

Buddypress允许在前端编辑用户信息。但问题是我的过滤器不会被调用。似乎只有赋予编辑每个用户或不编辑任何用户的能力。

这是一张照片,你明白我的意思:enter image description here

你有什么想法吗?或者更好的解决方案?

1 个回复
SO网友:DevNik

好吧,我的案子有了解决办法。也许有点困惑,但我没有看到这样做的可能性。如果你知道更好的方法,请告诉我。

首先,我在管理菜单中隐藏编辑项:

add_action( \'admin_bar_menu\', array($this,\'sa_classbook_remove_admin_bar_items\'), 999 );
function sa_classbook_remove_admin_bar_items(){
        global $wp_admin_bar;

        $wp_admin_bar->remove_node(\'user-admin\');
    }
然后手动检查角色:

add_action( \'bp_actions\', array($this,\'sa_classbook_bp_remove_nav_tabs\' ));
function sa_classbook_bp_remove_nav_tabs(){
        $current_user = get_user_by("ID",bp_displayed_user_id());
        //Only do this if the displayed Profile is not the own
        if(bp_displayed_user_id() !== get_current_user_id()) {
            //If the Current User is not the Admin
            if (!current_user_can(\'administrator\')) {
                if (!in_array(\'sa_classbook_participant\', (array)$current_user->roles)) {
                    //Remove settings
                    bp_core_remove_nav_item(\'notifications\');
                    bp_core_remove_nav_item(\'settings\');

                    bp_core_remove_subnav_item(\'profile\', \'edit\');
                    bp_core_remove_subnav_item(\'profile\', \'change-avatar\');
                    bp_core_remove_subnav_item(\'profile\', \'change-cover-image\');


                }
            }
        }
    }

结束

相关推荐

按用户‘xprofile’自定义域筛选BuddyPress用户帖子

嗨,我正在努力找出如何根据用户的个人资料字段为用户的帖子制作过滤器。。示例=用户注册表选择了2017、2018学年的下拉配置文件字段,然后他们创建了一个帖子。按毕业年份的分类筛选所有帖子。。所以你只能看到那个学年的人发的帖子。有没有人知道一个插件可以做到这一点。令人困惑的是,帖子正在加载,但会根据成员详细信息进行过滤。两个单独的目录。请提供帮助或建议