网络激活;如果(!CURRENT_USER_CAN(‘…_Options’))将我锁定在管理之外

时间:2016-09-26 作者:George Bredberg

iHi、,

我在插件中使用这个片段;

if ( ! ( current_user_can( \'manage_options\' ) ) )
  do something
 }
但问题是,当网络在多站点安装上激活此功能时,我会被锁定在管理页面之外。WP说“你没有这个页面的权限”或什么(从瑞典语翻译过来)。

通过反复试验,我将问题限制在函数“current\\u user\\u can”上,但is\\u super\\u admin给出了相同的结果。我被锁在外面了。请注意,只有在多站点安装上激活网络时,才会发生这种情况。如果我激活每个站点的插件,一切都会正常工作。看见github 例如,我如何尝试实现它。

怎么会这样?我已经尝试了很多次,并试图调整代码,但我无法让它工作。

有没有更好的方法检查it用户没有权限管理选项(没有管理功能)?

1 个回复
最合适的回答,由SO网友:George Bredberg 整理而成

谢谢你的建议。事实上,这是我用这张支票开的一个钩子。看起来是这样的(例如,检查是在两个地方针对不同的用户级别和两个不同的插件进行的)

// Down locks me out of admin area if network activated...
if(!(current\\u user\\u can(\'manage\\u options\')){add\\u action(\'admin\\u menu\',\'ngo\\u remove\\u eo\');}

函数为;

function ngo_remove_eo() {
remove_menu_page( \'edit.php?post_type=event\' );
}

我把它改成这个;

   add_action( \'wp_loaded\', \'eongo_cleanup\' );

function eongo_cleanup() {
    if (!(current_user_can(\'manage_options\'))) {  
    add_action( \'admin_menu\', \'ngo_remove_eo\' );
    }

    if(!is_super_admin()){
    add_action( \'admin_menu\', \'ngo_remove_eosubmenu\', 99 );
    add_action( \'do_meta_boxes\', \'remove_eopost_custom_fields\' );
    }
}
现在成功了:)非常感谢Dave。