web-dev-qa-db-ja.com

管理パネルでアクセスを制限する

特定のプラグインページ/通常のWP Pagesへのアクセスを制限したいです。メニューからこれらのページを隠す方法を見つけましたが、現在は制限していません。例えば、私はエディタを持っていて、彼らがMediaToolsにアクセスできないようにします - これらのページを隠すことができます:

function editor_menu() {
    global $menu;

    if(!current_user_can('administrator'))
    {
        $restricted = array(__('Media'),__('Tools'));
        end ($menu);
        while (prev($menu)){
            $value = explode(' ',$menu[key($menu)][0]);
            if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);}
        }
    }
}
add_action('admin_menu', 'editor_menu', 999);

しかし、どうすればこのページを閲覧できないように制限できますか。権限が好きですか?

1
Howdy_McGee

ここでの正しい解決策は、単にメニュー構造からそれらを削除するのではなく、単にadmin_menu項目の$ capabilityコンポーネントを更新することであると私は信じます。

これを試して:

/** Set 'administrator' cap for particular menu items **/
function update_admin_menu() {
    global $menu, $submenu;

    $menu[10][1] = 'administrator'; // Media
    foreach( $submenu['upload.php'] as &$item ) {
        $item[1] = 'administrator';
    }

    $menu[75][1] = 'administrator'; // Tools
    foreach( $submenu['tools.php'] as &$item ) {
        $item[1] = 'administrator';
    }    
}
add_action( 'admin_menu', 'update_admin_menu', 1000 );

ユーザーレベル に対するチェックは廃止予定ですが、これはこの状況で機能し、基本的に新しい上限を作成した場合と同じです。どの管理者が自動的に()にアクセスでき、代わりにこれらのメニュー項目にその機能を割り当てます。

1
Bendoh