我正在尝试修改我的插件的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;
}
对于后端,它可以完美地工作,请参见图片:
但现在是巴迪出版社:
Buddypress允许在前端编辑用户信息。但问题是我的过滤器不会被调用。似乎只有赋予编辑每个用户或不编辑任何用户的能力。
这是一张照片,你明白我的意思:
你有什么想法吗?或者更好的解决方案?
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\');
}
}
}
}