Flector

Как удалить метабоксы на странице редактирования?

Только 3 метабокса для выбора

На странице редактирования записи или страницы выводятся различные метабоксы (административные виджеты), которые можно скрыть или вывести через "Настройки экрана". Если на вашем сайте есть другие авторы кроме вас, то, возможно, что вы захотите скрыть от них некоторые метабоксы, в чьи настройки им лучше не залезать. Например, зачем давать авторам возможность отключать комментарии к своим записям? Добавьте в файл functions.php вашей темы следующий код:

//скрытие метабоксов от всех кроме админов start
function wph_remove_metaboxes_post() {
    if (!current_user_can('administrator')) {
       remove_meta_box('postexcerpt','post','normal');      //цитата
       remove_meta_box('commentstatusdiv','post','normal'); //обсуждение
       remove_meta_box('trackbacksdiv','post','normal');    //обратные ссылки
       remove_meta_box('slugdiv','post','normal');          //ярлык
       remove_meta_box('authordiv','post','normal');        //автор
       remove_meta_box('revisionsdiv','post','normal');     //ревизии
       remove_meta_box('postcustom','post','normal');       //произвольные поля
    }
}
add_action('admin_menu','wph_remove_metaboxes_post');
//скрытие метабоксов от всех кроме админов end

Этот сниппет отключит на странице редактирования записей возможность вывести указанные метабоксы (удалите из кода те метабоксы, которые вам нужны) для всех пользователей кроме администраторов сайта.

Для отключения метабоксов при редактировании страниц используйте такой код:

//скрытие метабоксов от всех кроме админов start
function wph_remove_metaboxes_page() {
    if (!current_user_can('administrator')) {
       remove_meta_box('postexcerpt','page','normal');      //цитата
       remove_meta_box('commentstatusdiv','page','normal'); //обсуждение
       remove_meta_box('trackbacksdiv','page','normal');    //обратные ссылки
       remove_meta_box('slugdiv','page','normal');          //ярлык
       remove_meta_box('authordiv','page','normal');        //автор
       remove_meta_box('revisionsdiv','page','normal');     //ревизии
       remove_meta_box('postcustom','page','normal');       //произвольные поля
    }
}
add_action('admin_menu','wph_remove_metaboxes_page');
//скрытие метабоксов от всех кроме админов end

В этом сниппете изменилась только одна вещь - поменялся тип записи с 'post' на 'page'. Таким образом можно удалить метабоксы для произвольных типов записей - надо просто в коде указать тип записи, в котором должны быть удалены метабоксы.

Однако, повторять код для каждого отдельного типа записей будет нерационально. Поэтому для скрытия метабоксов сразу для всех существующих на сайте типов записей используйте следующий сниппет:

//скрытие метабоксов от всех кроме админов start
function wph_remove_metaboxes_all() {
  if(!current_user_can('administrator')) {
  $args = array('public' => true);
  $output = 'names';
  $operator = 'and';
  $post_types = get_post_types($args, $output, $operator); 
  foreach ($post_types  as $post_type) {
     remove_meta_box('postexcerpt',$post_type,'normal');    //цитата
     remove_meta_box('commentstatusdiv',$post_type,'normal'); //обсуждение
     remove_meta_box('trackbacksdiv',$post_type,'normal');  //обратные ссылки
     remove_meta_box('slugdiv',$post_type,'normal');        //ярлык
     remove_meta_box('authordiv',$post_type,'normal');      //автор
     remove_meta_box('revisionsdiv',$post_type,'normal');   //ревизии
     remove_meta_box('postcustom',$post_type,'normal');     //произвольные поля
  }}
}
add_action('add_meta_boxes', 'wph_remove_metaboxes_all', 999);
//скрытие метабоксов от всех кроме админов end

Метабоксы будут скрыты при редактировании абсолютно любых типов записей.

Для удаления метабоксов плагинов нужно использовать хук на другую функцию. Например, чтобы убрать метабокс плагина All in One SEO Pack используйте код:

//удаление в записях метабокса AIOSP start
function wph_remove_plugin_metabox() {
    if(!current_user_can('administrator')) {
        remove_meta_box('aiosp','post','normal');
    }
}
add_action('do_meta_boxes', 'wph_remove_plugin_metabox');
//удаление в записях метабокса AIOSP end

И метабокс плагина пропадет со страницы редактирования записей.


Написать комментарий

Для вставки кода воспользуйтесь кнопкой "Код". Используйте предпросмотр!