WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Удаление виджетов и метабоксов из консоли WordPress

Чтобы удобнее было работать в админке WordPress, иногда нужно отключить метабоксы и виджеты, В этой которой заметке посмотрим как это сделать.

Удаление Виджетов со страницы виджетов

Чтобы отключить базовые виджеты в WordPress используйте такой код:

## Отключаем стандартные виджеты WordPress
add_action( 'widgets_init', 'unregister_basic_widgets' );
function unregister_basic_widgets() {
	unregister_widget('WP_Widget_Pages');            // Виджет страниц
	unregister_widget('WP_Widget_Calendar');         // Календарь
	unregister_widget('WP_Widget_Archives');         // Архивы
	unregister_widget('WP_Widget_Links');            // Ссылки
	unregister_widget('WP_Widget_Meta');             // Мета виджет
	unregister_widget('WP_Widget_Search');           // Поиск
	unregister_widget('WP_Widget_Text');             // Текст
	unregister_widget('WP_Widget_Categories');       // Категории
	unregister_widget('WP_Widget_Recent_Posts');     // Последние записи
	unregister_widget('WP_Widget_Recent_Comments');  // Последние комментарии
	unregister_widget('WP_Widget_RSS');              // RSS
	unregister_widget('WP_Widget_Tag_Cloud');        // Облако меток
	unregister_widget('WP_Nav_Menu_Widget');         // Меню
	unregister_widget('WP_Widget_Media_Audio');      // Audio
	unregister_widget('WP_Widget_Media_Video');      // Video
	unregister_widget('WP_Widget_Media_Gallery');    // Gallery
	unregister_widget('WP_Widget_Media_Image');      // Image
}

Используйте этот код в файле темы functions.php.

Подробнее о том как удалять виджеты и другие тонкости читайте в описании функции unregister_widget()

Удаление Метабоксов из Консоли сайта

Если в консоли WordPress не нужны какие-либо блоки (виджеты), то обычно они отключаются в «Настройках экрана» - всплывающее окошко, которое позволяет галочками выбрать нужные нам блоки.

Однако у такого способа отключения виджетов есть как минимум 2 недостатка:

  1. Выключение галочками, лишь скрывает блоки (средствами CSS), а не удаляет их из кода.

  2. Если мы делаем сайт на заказ, то некоторые блоки лучше вообще скрыть, чтобы не было ни блоков, ни галочек в "Настройках экрана".

Чтобы избежать этих недостатков, виджеты можно убрать на программном уровне, использовав такой код в файле темы functions.php:

## Удаление виджетов из Консоли WordPress
add_action( 'wp_dashboard_setup', 'clear_wp_dash' );
function clear_wp_dash(){
	$dash_side   = & $GLOBALS['wp_meta_boxes']['dashboard']['side']['core'];
	$dash_normal = & $GLOBALS['wp_meta_boxes']['dashboard']['normal']['core'];

	unset( $dash_side['dashboard_quick_press'] );       // Быстрая публикация
	unset( $dash_side['dashboard_recent_drafts'] );     // Последние черновики
	unset( $dash_side['dashboard_primary'] );           // Блог WordPress
	unset( $dash_side['dashboard_secondary'] );         // Другие Новости WordPress

	unset( $dash_normal['dashboard_incoming_links'] );  // Входящие ссылки
	unset( $dash_normal['dashboard_right_now'] );       // Прямо сейчас
	unset( $dash_normal['dashboard_recent_comments'] ); // Последние комментарии
	unset( $dash_normal['dashboard_plugins'] );         // Последние Плагины

	unset( $dash_normal['dashboard_activity'] );        // Активность
}

## Удаление виджета "Добро пожаловать"
remove_action( 'welcome_panel', 'wp_welcome_panel' );

В коде я подписал какая строка за какой виджет отвечает. Здесь я специально показал все стандартные блоки Консоли WordPress, в действительности в коде нужно оставить только те строки которые отвечают за виджеты, которые нужно удалить (пардон за тавтологию). Я в коде их не удалил, а закомментировал, т.е, если данный код поместить в файл темы functions.php, то в Консоли WordPress останется всего 2 виджета: Полседние черновики и Прямо сейчас.

Удаление Метабоксов из Консоли Сети сайтов (мультисайт)

Здесь все делается точно также, только нужно использовать хук wp_network_dashboard_setup:

## Удаление виджетов из Консоли WordPress Multisite
add_action( 'wp_network_dashboard_setup', 'clear_wp_network_dash' );
function clear_wp_network_dash(){

	$dash_normal = & $GLOBALS['wp_meta_boxes']['dashboard-network']['normal']['core'];
	$dash_side   = & $GLOBALS['wp_meta_boxes']['dashboard-network']['side']['core'];

	unset( $dash_normal['network_dashboard_right_now'] ); // Прямо сейчас

	unset( $dash_side['dashboard_primary'] ); // Новости и мероприятия WordPress
}

Помимо удаления виджетов, можно также создавать свои. Как это делать подробно описано в кодексе WordPress.

26 комментов
  • Никита dvdrip-2010.ru

    Хм, вы так и не написали где находится этот файл functions.php

    Ответить06.Ноя.2010 в 22:29 #
  • alexscv alex.scv.name

    Спасибо, нужная информация, мне в свое время ваша статья сэкономила бы время, но пришлось доходить самому...

    Ответить13.Ноя.2010 в 15:16 #
  • Наталья ufa-webmaster.ru

    спасибо! нашла на вашем сайте много полезного, а эта тема особенно актуальна
    хочется заказчика от лишней головной боли уберечь )mosking
    ну и себя тоже )mosking

    Ответить27.Ноя.2010 в 00:52 #
  • @ driver dobrovoi.ru

    Решение рабочее, а если не касаясь глобальной переменной, используя функцию remove_meta_box() для управления виджетами, может ошибаюсь, но выглядит проще:

    add_action('admin_init', 'rw_remove_dashboard_widgets');
    function rw_remove_dashboard_widgets() {
     remove_meta_box('dashboard_right_now', 'dashboard', 'normal');   // прямо сейчас
     remove_meta_box('dashboard_recent_comments', 'dashboard', 'normal'); // последние комментарии
     remove_meta_box('dashboard_incoming_links', 'dashboard', 'normal');  // входящие ссылки
     remove_meta_box('dashboard_plugins', 'dashboard', 'normal');   // плагины
    
     remove_meta_box('dashboard_quick_press', 'dashboard', 'normal');  // быстрая публикация
     remove_meta_box('dashboard_recent_drafts', 'dashboard', 'normal');  // последние черновики
     remove_meta_box('dashboard_primary', 'dashboard', 'normal');   // блог wordpress
     remove_meta_box('dashboard_secondary', 'dashboard', 'normal');   // другие новости wordpress
    }

    ...как выглядит конечно не важно, главное работает, хотелось бы знать не ошибаюсь ли я в своих выводах. Спасибо.

    Ответить14.Мар.2011 в 13:29 #
    • Kama7623

      Как выразился один из комментаторов, - "те же яйца, только с боку"...

      Через глобальную переменную удалить, кажется более эстетично на вид smile

      Блог то называется "Альтернативный взгляд на WordPress" ... laugh

      Ответить14.Мар.2011 в 18:42 #
      • @ driver dobrovoi.ru
        "те же яйца, только с боку"

        Наверно в точку, улыбнуло smile
        Эстетичней - это да.
        Удачи!

        Ответить14.Мар.2011 в 19:47 #
      • Kama7623

        Вот, я же только сегодня написал: remove_meta_box().

        Ответить14.Мар.2011 в 20:30 #
        • @ driver dobrovoi.ru

          Все, картина для меня, теперь более чем полная, отличная получилась шпаргалка.

          Ответить14.Мар.2011 в 21:23 #
    • @ Lelik

      Все верно!!! По шагам автора в админке выскакивает Warning: Invalid argument supplied for foreach() in /var/wwwбла/бла/блаscreen.php on line 64

      Ответить20.Май.2013 в 15:25 #
  • Kemal klmn.tk

    А можно ли это как-то глобально использовать, а не с определённой темой, тема всётаки на админку не распространяется?

    Ответить12.Авг.2011 в 17:59 #
    • Kemal klmn.tk

      Нашёл! Нужно в wp-admin/includes/dashboard.php закомментить лишние пункты. Мне кажется этот способ лучше, универсальнее.

      Ответить12.Авг.2011 в 18:46 #
      • Kama7623

        Может в каком-то смысле и лучше, но уж точно не универсальнее smile Он будет работать до первого обновления WordPress, а потом все слетит и придется процедуру проделывать заново.

        Ответить13.Авг.2011 в 22:16 #
    • Kama7623

      Можно в плагин оформить, правда стоит ли?

      Ответить13.Авг.2011 в 22:15 #
      • Kemal klmn.tk

        Да, было бы не плохо. Хотя у меня после обновления с 3.2 на 3.2.1 ничего не слетело.
        И если делать сайт на заказ, то обновления можно вообще не делать, а вот тему они таким образом смогут поменять.

        Ответить09.Сен.2011 в 20:08 #
  • Allpa allpa.ru

    Эх, мне бы не столько убрать виджеты, сколько научить их понимать программный код, чтобы можно было юзать твои функции в полную силу.
    А то я сейчас пилю очередной шаблон, так он даже плагин PHP Widgets не понимает: стоит запихнуть в футер или сайдбар ПХП-виджет с кодом для твоих функций, как сайдбар или футер не грузяццо ваще.
    Я шоке smile

    Ответить04.Ноя.2011 в 21:11 #
  • Иван

    спасибо! админка начала после отключения всех виджетов начала работать ораздо шустрее!! ... или мне показалось..? smile

    Ответить07.Ноя.2011 в 18:22 #
    • Kama7623

      Скорее вам показалось, не могло это так заметно сказаться на производительности. Просто стало удобнее возможно.

      Ответить22.Ноя.2011 в 17:54 #
  • Михаил prazdnik-vkusa.ru

    У меня наооборот пропал виджет админ панели, как быть, где взять?

    Ответить30.Апр.2014 в 13:05 #
    • Kama7623

      Для начал проверьте не отключен ли он в "Настройках экрана" справа вверху вкладка в консоли, там галочки. Если не там отключен, то где-то в коде, вероятно плагин или файл functions.php

      Ответить30.Апр.2014 в 17:53 #