删除访问某些管理菜单的功能

时间:2014-04-26 作者:RoseCoder

我正在尝试删除具有参与者角色的用户的一些管理功能。我所说的删除一些管理功能的意思是禁止他们查看某些管理菜单项,如评论、工具、媒体等。我已使用以下代码从“管理”菜单中删除了所需的项目:

function remove_menus(){

$author = wp_get_current_user();
if(isset($author->roles[0])){ 
    $current_role = $author->roles[0];
}else{
    $current_role = \'no_role\';
}

if($current_role == \'contributor\'){  
  remove_menu_page( \'index.php\' );                  //Dashboard
  remove_menu_page( \'edit.php\' );                   //Posts
  remove_menu_page( \'upload.php\' );                 //Media
  remove_menu_page( \'tools.php\' );                  //Tools
  remove_menu_page( \'edit-comments.php\' );               //Comments

}

}
add_action( \'admin_menu\', \'remove_menus\' );
这是一种享受。我面临的问题是,我只能手动将查询字符串添加到url,例如/wp admin/edit。php,这将带我进入后期编辑屏幕。有没有人知道如何限制这些页面被完全访问,以及如何在管理菜单中隐藏这些页面?

4 个回复
SO网友:RoseCoder

我最终找到了答案,这是我使用的代码:

function restrict_menus() {
    $author = wp_get_current_user();

    if( isset( $author->roles[0] ) ) { 
        $current_role = $author->roles[0];
    } else {
        $current_role = \'no_role\';
    }

    if( \'contributor\' == $current_role ) {  
        $screen = get_current_screen();
        $base   = $screen->id;


        if( \'edit-post\' == $base || \'upload\' == $base || \'tools\' == $base || \'edit-comments\' == $base ) {
            wp_die( \'Cheatin’ uh?\' );
        }
    }
}
add_action( \'current_screen\', \'restrict_menus\' );

SO网友:Mr. Curious

我知道这个问题已经得到了回答,而且已经过时了。然而,我确实想提供另一种解决方案。这就是我在不久前编写的插件中所做的(我修改了代码以使用您的页面)。

因为您想限制参与者角色,所以可以使用role capabilities. 贡献者无法发布帖子,因此您可以执行以下操作。

Part 1: Remove Items from the Admin menu

add_action( \'admin_menu\', \'tcd_remove_admin_menus\' );
function tcd_remove_admin_menus() {

    // don\'t do anything if the user can publish posts
    if ( current_user_can( \'publish_posts\' ) ) {
        return;
    }

    // remove these items from the admin menu
    remove_menu_page( \'edit.php\' );          // Posts
    remove_menu_page( \'upload.php\' );        // Media
    remove_menu_page( \'tools.php\' );         // Tools
    remove_menu_page( \'edit-comments.php\' ); // Comments

}
正如您所说的,它并没有限制用户只需输入直接页面url。以下是我如何编写页面限制:

Part 2: Restrict Access to Admin Pages

add_action( \'current_screen\', \'tcd_restrict_admin_pages\' );
function tcd_restrict_admin_pages() {

    // don\'t do anything if the user can publish posts
    if ( current_user_can( \'publish_posts\' ) ) {
        return;
    }

    // retrieve the current page\'s ID
    $current_screen_id = get_current_screen()->id;

    // determine which screens are off limits
    $restricted_screens = array(
        \'edit\',
        \'upload\',
        \'tools\',
        \'edit-comments\',
    );

    // Restrict page access
    foreach ( $restricted_screens as $restricted_screen ) {

        // compare current screen id against each restricted screen
        if ( $current_screen_id === $restricted_screen ) {
            wp_die( __( \'You are not allowed to access this page.\', \'tcd\' ) );
        }

    }

}
对我来说,使用角色功能和数组使其更易于使用。无论如何,我希望这个方法是有用的。

干杯

SO网友:Jared Cobb

我通常使用(并推荐)Members plugin. UI非常易于使用,您还可以在数据库(而不是代码)中存储您的角色/权限逻辑,这使得“即时”更改变得很容易。

这个插件甚至允许您创建一个自定义角色(可能您想发明一个称为“照片编辑器”或“评论审批者”等)并限制他们可能看到的菜单(&;通道我想这正是你想要的。

SO网友:Brad Dalton

你可以create a custom role 按照s\\u da\\u hum的建议,或通过将此代码添加到子主题函数中来删除参与者角色的功能。php文件。

add_action( \'init\', \'wpsites_remove_contributor_capabilities\' );

function wpsites_remove_contributor_capabilities() {

$contributor = get_role( \'contributor\' );

$caps = array(
    \'edit_posts\',
    \'delete_posts\',
);

foreach ( $caps as $cap ) {

    $contributor->remove_cap( $cap );
    }
}
来源:https://codex.wordpress.org/Function_Reference/add_role

结束