web-dev-qa-db-fra.com

Supprimer les menus et sous-menus

J'ai donc trouvé des extraits utiles pour supprimer les éléments du menu administrateur. Cependant, j'ai des problèmes avec les éléments de sous-menu. Je souhaite conserver le menu de présentation, mais me débarrasser des thèmes, des widgets et de l'éditeur.

function remove_menus()
{
global $menu;
global $current_user;
get_currentuserinfo();
if($current_user->user_login == 'username')
{
    $restricted = array(__('Posts'),
                        __('Links'),                     
                        __('Comments'),
                        __('Plugins'),
                        __('Users'),
                        __('Tools'),    
                        __('Settings')

    );
    end ($menu);
    while (prev($menu)){
        $value = explode(' ',$menu[key($menu)][0]);
        if(in_array($value[0] != NULL?$value[0]:"" , $restricted))
       {unset($menu[key($menu)]);}
    }// end while
    }// end if
    }
    add_action('admin_menu', 'remove_menus');

function remove_submenus()
{
global $menu;
global $current_user;
get_currentuserinfo();
if($current_user->user_login == 'username')
{
    global $submenu;
    unset($submenu['themes.php'][10]); // remove the theme editor
}
}
add_action('admin_menu', 'remove_menus');
2
Alex

Essaye ça:

add_action('_admin_menu', 'remove_editor_submenu', 1);
function remove_editor_submenu() {
    remove_action('admin_menu', '_add_themes_utility_last', 101);
}

add_action('admin_init', 'remove_theme_submenus');
function remove_theme_submenus() {
    global $submenu; 
    unset($submenu['themes.php'][5]);
    unset($submenu['themes.php'][7]);
    unset($submenu['themes.php'][15]);
}

Pour désactiver d'autres noms de sous-menu, allez à ./wp-admin/menu.php et recherchez le ou les éléments à désactiver.

EDIT: En ce qui concerne la désactivation par nom d’utilisateur, j’aimerais plutôt ajouter une nouvelle fonctionnalité à un rôle et l’utiliser comme condition de suppression voir ici . Sinon, utilisez ce que vous utilisiez déjà, comme ceci:

add_action('_admin_menu', 'remove_editor_submenu', 1);
function remove_editor_submenu() {
    global $current_user;
    get_currentuserinfo();
    if($current_user->user_login == 'username') {
        remove_action('admin_menu', '_add_themes_utility_last', 101);
    }
}

add_action('admin_init', 'remove_theme_submenus');
function remove_theme_submenus() {
    global $submenu, $current_user;
    get_currentuserinfo();
    if($current_user->user_login == 'username') {
        unset($submenu['themes.php'][5]);
        unset($submenu['themes.php'][7]);
        unset($submenu['themes.php'][15]);
    }
}
2
Paul

Il existe des fonctions beaucoup plus simples pour supprimer des pages de menu et de sous-menu depuis la version 3.1:

remove_menu_page () et remove_submenu_page ()

cependant, le problème avec la suppression de thèmes est que le menu de présentation IS la page des thèmes.

EDITER - ce que vous pouvez faire est de supprimer tout le menu d’apparence, puis de créer un nouvel élément de menu de niveau supérieur avec add_menu_page ()

function wpse31255_add_menu_page(){
    add_menu_page( __('Nav Menus', 'mav-menus'), __('Nav Menus', 'nav-menus'), 'edit_themes', 'nav-menus.php', '', 99 );
}
add_action('admin_menu', 'wpse31255_add_menu_page');
2
Milo