Удалить Метабокс с экрана меню
Немного покопался в файлах WP и подумал, что, возможно, я что-то упустил. Конечная цель состоит в том, чтобы удалить метабокс Theme Locations
с экрана меню, если у кого-то нет определенной возможности manage_options
. Я знаю, немного странно для удобства использования, но есть только одно меню, и мы пытаемся сделать так, чтобы его было сложнее испортить;)
Глядя на /wp-admin/nav-menu.php
вокруг линии 383
Я вижу wp_nav_menu_setup()
, поэтому я попытался добавить следующее в качестве фильтра, но пока безуспешно:
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);
Любая помощь был бы очень признателен. Спасибо!
4 answers
Поле добавляется в wp_nav_menu_setup(), поэтому вам придется удалить его через некоторое время после этого и до того, как оно будет выведено позже в nav-menus.php . Похоже, там нет никаких крючков действий, которые вы могли бы использовать, но admin-header.php имеет несколько. Вы могли бы попробовать это:
add_action( 'admin_head-nav-menus.php', 'roots_remove_nav_menu_metaboxes' );
Однако я никогда не пробовал удалять метабоксы с экрана меню, и это непроверено, так что понятия не имею, работает ли это.
Я не думаю, что это крючок. На самом деле, похоже, что подходящего вообще не существует. Но внутри wp_nav_menu_setup()
manage_nav-menus_columns
вызывается вскоре после добавления метабоксов. Вы можете подключиться к нему и удалить его:
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;
}
Быстрый и простой вариант - использовать плагин Администрировать , это поддерживает эту опцию для разных ролей.
Вместо удаления метабокса вы можете скрыть его с помощью CSS, например:
#nav-menu-theme-locations {
display: none;
}
Ваша проблема с удалением самой коробки, скорее всего, связана с заказом, либо попыткой удалить коробку до того, как она была добавлена, либо удалением ее после того, как она уже была отправлена пользователю