Been digging into WP files for a bit and think I just might be missing something. The end-goal is to remove the Theme Locations
metabox from the Menus screen if someone doesn’t have a certain capability manage_options
. I know, a little odd for usability, but there’s only one menu and we’re trying to make this harder to screw up 😉
Looking at /wp-admin/nav-menu.php
around line 383
I see wp_nav_menu_setup()
so I tried to add the following as a filter, but with no luck so far:
function roots_remove_nav_menu_metaboxes() {
// Remove Theme Locations from users without the 'manage_options' capability
if (current_user_can('manage_options') == false) {
remove_meta_box('wp_nav_menu_locations_meta_box', 'nav-menus', 'side'); // theme locations
}
}
add_action('wp_nav_menu_setup', 'roots_remove_nav_menu_metaboxes',9999);
Any help would be really appreciated. Thanks!
The box gets added in wp_nav_menu_setup(), so you’ll have to remove it sometime after that and before it’s being output later in nav-menus.php. There don’t seem to be any action hooks you can use there, but admin-header.php has a few. You could try this:
I’ve never tried removing metaboxes from the menu screen, though, and it’s untested, so no idea if it works.
I don’t think that’s a hook. In fact there doesn’t seem to be an appropriate one at all. But inside
wp_nav_menu_setup()
, themanage_nav-menus_columns
is called shortly after the metaboxes are added. You can hook into that and remove it:A fast an easy option is to use the plugin Adminimize, this support this as option for different roles.
Instead of removing the metabox, you could hide it with CSS, e.g.:
Your issue with removing the box itself is most likely an issue with ordering, either trying to remove the box before it has been added, or removing it after it has already been sent to the user