Je creuse un peu dans les fichiers WP et je pense qu'il me manque quelque chose. L'objectif final est de supprimer la Theme Locations
metabox de l'écran Menus si quelqu'un n'a pas une certaine capacité manage_options
. Je sais, un peu étrange pour la facilité d'utilisation, mais il n'y a qu'un seul menu et nous essayons de rendre cela plus difficile à gâcher;)
En regardant /wp-admin/nav-menu.php
autour de la ligne 383
, je vois wp_nav_menu_setup()
. J'ai donc essayé d'ajouter les éléments suivants en tant que filtre, mais sans succès jusqu'à présent:
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);
Toute aide sera grandement appréciée. Merci!
La boîte est ajoutée à wp_nav_menu_setup (), vous devrez donc la supprimer peu de temps après et avant qu'elle ne soit affichée plus tard dans nav-menus.php. Il ne semble y avoir aucun crochet d’action que vous puissiez utiliser ici, mais admin-header.php en a quelques-uns. Vous pouvez essayer ceci:
add_action( 'admin_head-nav-menus.php', 'roots_remove_nav_menu_metaboxes' );
Cependant, je n'ai jamais essayé de supprimer les métaboxes de l'écran du menu, et cela n'a pas été testé, donc aucune idée si cela fonctionne.
Je ne pense pas que ce soit un crochet. En fait, il ne semble pas y avoir de solution appropriée. Mais dans wp_nav_menu_setup()
, le manage_nav-menus_columns
est appelé peu de temps après l’ajout des métaboxes. Vous pouvez vous y accrocher et le supprimer:
add_action( 'manage_nav-menus_columns', 'my_remove_meta_locations_box' );
function my_remove_meta_locations_box($columns) {
if ( ! current_user_can('manage_options') )
remove_meta_box('nav-menu-theme-locations', 'nav-menus', 'side');
return $columns;
}
Une option rapide et facile consiste à utiliser le plugin Adminimize , ce qui permet d'utiliser cette option pour différents rôles.
Au lieu de supprimer la metabox, vous pouvez la cacher avec CSS, par exemple:
#nav-menu-theme-locations {
display: none;
}
Votre problème avec la suppression de la boîte elle-même est très probablement un problème avec la commande, soit d'essayer de supprimer la boîte avant qu'elle ait été ajoutée, soit de la supprimer après qu'elle a déjà été envoyée à l'utilisateur.