Удалить Метабокс с экрана меню


Немного покопался в файлах 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);

Любая помощь был бы очень признателен. Спасибо!

Author: Zach, 2012-03-30

4 answers

Поле добавляется в wp_nav_menu_setup(), поэтому вам придется удалить его через некоторое время после этого и до того, как оно будет выведено позже в nav-menus.php . Похоже, там нет никаких крючков действий, которые вы могли бы использовать, но admin-header.php имеет несколько. Вы могли бы попробовать это:

add_action( 'admin_head-nav-menus.php', 'roots_remove_nav_menu_metaboxes' );

Однако я никогда не пробовал удалять метабоксы с экрана меню, и это непроверено, так что понятия не имею, работает ли это.

 3
Author: shabushabu, 2012-03-30 16:52:35

Я не думаю, что это крючок. На самом деле, похоже, что подходящего вообще не существует. Но внутри 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;
}
 2
Author: Stephen Harris, 2012-03-30 16:29:43

Быстрый и простой вариант - использовать плагин Администрировать , это поддерживает эту опцию для разных ролей.

 2
Author: bueltge, 2012-03-30 17:34:39

Вместо удаления метабокса вы можете скрыть его с помощью CSS, например:

#nav-menu-theme-locations {
    display: none;
}

Ваша проблема с удалением самой коробки, скорее всего, связана с заказом, либо попыткой удалить коробку до того, как она была добавлена, либо удалением ее после того, как она уже была отправлена пользователю

 1
Author: Tom J Nowell, 2012-03-30 16:09:38