Как удалить метабоксы на странице редактирования?
На странице редактирования записи или страницы выводятся различные метабоксы (административные виджеты), которые можно скрыть или вывести через "Настройки экрана". Если на вашем сайте есть другие авторы кроме вас, то, возможно, что вы захотите скрыть от них некоторые метабоксы, в чьи настройки им лучше не залезать. Например, зачем давать авторам возможность отключать комментарии к своим записям? Добавьте в файл 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 |
И метабокс плагина пропадет со страницы редактирования записей.