Support » Developing with WordPress » allow editors to modify menus

  • Resolved rcorr

    (@rcorr)


    Hello,

    I know only the administrator role has access to the Appearance menus – themes, customize, widgets, menus, etc. – by default.

    I am trying to implement code to allow the role “editor” to have access to the menus and only the menus page so they can add/modify/and delete without relying on the administrator. I have found code snippets to add to your functions.php to remove most of the appearance submenus. However, I haven’t been successful in finding a code snippet to remove the customize menu.

    I have found the following in my search, but it only remove the themes, widgets, and editor submenu

    
    // Allow editors to see Appearance menu
    $role_object = get_role( 'editor' );
    $role_object->add_cap( 'edit_theme_options' );
    function hide_menu() {
     
        // Hide theme selection page
        remove_submenu_page( 'themes.php', 'themes.php' );
     
        // Hide widgets page
        remove_submenu_page( 'themes.php', 'widgets.php' );
    
        // Hide customize page
        remove_submenu_page( 'themes.php', 'customize.php' );
     
        // Hide customize page
        global $submenu;
        unset($submenu['themes.php'][6]);
     
    }
     
    add_action('admin_head', 'hide_menu');
    
    

    Does anyone who know how to remove the customize submenu from Appearance?

    Thank you in advance.

Viewing 3 replies - 1 through 3 (of 3 total)
  • Jarret

    (@jarretc)

    That code is working for me on my local test install. If you are still having the issue, does it go away if you deactivate all plugins and switch to one of the default themes?

    Additionally, you may want to try targeting admin_menu instead of admin_head along with a priority

    https://developer.wordpress.org/reference/functions/remove_submenu_page/

    rcorr

    (@rcorr)

    Thanks Jarret.

    I’ve changed it to admin_menu and added a priory. This did the trick. I also added additional code to remove links for the admin top bar.

    Cheers

    I used the following code to ensure only the Editor role was affected by this function, and also to ensure that the edit_theme_options capability is only added once for the role.

    // Allow editors to see access the Menus page under Appearance but hide other options
    // Note that users who know the correct path to the hidden options can still access them
    function hide_menu() {
     	$user = wp_get_current_user();
    	
    	// Check if the current user is an Editor
    	if ( in_array( 'editor', (array) $user->roles ) ) {
    		
    		// They're an editor, so grant the edit_theme_options capability if they don't have it
    		if ( ! current_user_can( 'edit_theme_options' ) ) {
    			$role_object = get_role( 'editor' );
    			$role_object->add_cap( 'edit_theme_options' );
    		}
    		
    		// Hide the Themes page
    	    remove_submenu_page( 'themes.php', 'themes.php' );
     
    	    // Hide the Widgets page
    	    remove_submenu_page( 'themes.php', 'widgets.php' );
    
    	    // Hide the Customize page
    	    remove_submenu_page( 'themes.php', 'customize.php' );
     
    	    // Remove Customize from the Appearance submenu
    	    global $submenu;
    	    unset($submenu['themes.php'][6]);
    	}
    }
     
    add_action('admin_menu', 'hide_menu', 10);
Viewing 3 replies - 1 through 3 (of 3 total)
  • The topic ‘allow editors to modify menus’ is closed to new replies.