WordPress как на ладони
wordpress jino

unregister_widget() WP 2.8.0

Отменяет регистрацию виджета. Удаляет виджет по указанному названию класса виджета.

Эта функция позволяет отключить/отменить/удалить любой ранее зарегистрированный виджет в WordPress.

При удалении виджета таким способом, также удаляются все его настройки. Т.е. если виджет имеет богатый выбор настроек и вы его отменили, то все настройки будут потеряны...

Хуков нет.

Возвращает

Ничего.

Использование

unregister_widget( $widget_class );
$widget_class(объект) (обязательный)

Название класса, который регистрирует виджет, путем расширения WP_Widget. Стандартные называния классов:

WP_Widget_Pages            // Виджет страниц
WP_Widget_Calendar         // Календарь
WP_Widget_Archives         // Архивы
WP_Widget_Links            // Ссылки
WP_Widget_Meta             // Мета виджет
WP_Widget_Search           // Поиск
WP_Widget_Text             // Текст
WP_Widget_Categories       // Категории
WP_Widget_Recent_Posts     // Последние записи
WP_Widget_Recent_Comments  // Последние комментарии
WP_Widget_RSS              // RSS
WP_Widget_Tag_Cloud        // Облако меток
WP_Nav_Menu_Widget         // Меню

Примеры

#1 Удалим виджет

Этот пример показывает как отменить регистрацию виджета Календарь. Может пригодится когда нужно заменить стандартный виджет на свой:

add_action( 'widgets_init', 'remove_calendar_widget' );
function remove_calendar_widget() {
	unregister_widget('WP_Widget_Calendar');
}

#2 Отключаем все стандартные виджеты 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');         // Меню
}

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

#3 Отключение поддержки виджетов в WordPress

Пример выше показывает, как отключить все виджеты по умолчанию и дает выбор какие отключать, а какие нет.

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

remove_action( 'init', 'wp_widgets_init', 1 );

Кроме подключения виджетов функция wp_widgets_init() вызывает событие widgets_init на которое обычно вешаются хуки включения виджетов из плагинов. Поэтому при отключении этого хука, скорее всего и виджеты плагинов и тем работать не будут. Т.е. поддержка виджетов будет отключена полностью.

#4 Основательное отключение базовых виджетов

Этот пример показывает как отключить базовые виджеты WordPress. Но сделать это надо так, чтобы отключались подключаемые PHP файлы виджетов и после отключение не существовало классов базовых виджетов: WP_Widget_Pages, WP_Widget_Search и т.д. После такого отключения мы можем создать свои виджеты с названиями базовых классов. Это если можно так сказать отключение базовых виджетов на корню.

Так как это низкоуровневая настройка, такой код должен находиться либо в обычном плагине, либо в обязательном плагине, но не позже...

remove_action( 'plugins_loaded', 'wp_maybe_load_widgets', 0 );
// включим событие отключенное в wp_maybe_load_widgets
add_action( '_admin_menu', 'wp_widgets_add_menu' );

// чтобы не регистрировались виджеты классов которых теперь вообще нет...
remove_action( 'init', 'wp_widgets_init', 1 );

// включим событие отключенное в wp_widgets_init
add_action( 'init', 'my_wp_widgets_init', 1 );
function my_wp_widgets_init(){
	if ( !is_blog_installed() ) return;

	/**
	 * Fires after all default WordPress widgets have been registered.
	 *
	 * @since 2.2.0
	 */
	do_action( 'widgets_init' );
}

После установки этого кода, будут отключены все базовые виджеты, но меню виджетов в админ-панели останется рабочим... А также вы сможете написать свои виджеты с названиями PHP классов базовых виджетов: WP_Widget_Pages, WP_Widget_Search и т.д.

Код unregister widget: wp-includes/widgets.php WP 4.8.2

<?php
function unregister_widget($widget_class) {
	global $wp_widget_factory;

	$wp_widget_factory->unregister($widget_class);
}

Cвязанные функции

Из метки: sidebar (widget Виджет)

unregister_widget 4 комментария
  • вадик

    а смайлы так можно отключить на низком уровне через mu-plugins?
    одним махом, чтобы не как плагине disable-emojis около десятка строк кода

    • Kama4464

      Ставь плагин disable-emojis - это лучшее решение! Ну или сунь его код в mu плагины, если душе так легче... unknw

      • вадик

        понятно. спасибо.
        закинул в "mu-plugins" твой код, но только такой, т.к создавать виджеты не буду:

        remove_action( 'plugins_loaded', 'wp_maybe_load_widgets', 0 );
        remove_action( 'init', 'wp_widgets_init', 1 );

        потом через плагин query-monitor нашел в графе "plugins_loaded" такую штуку wp_maybe_load_embeds(), как видно из названия, видимо похожие вещи. соответственно добавил в "mu-plugins" еще и такой код:

        remove_action( 'plugins_loaded', 'wp_maybe_load_embeds', 0 );

        из результатов отчета плагина query-monitor функция wp_maybe_load_embeds() исчезла.

        остался еще "smilies_init()" в хуке "init". он почему-то не убирается плагином disable-emojis

        • вадик

          оказалось smilies_init() отвечает за преобразование текстового представления смайлов (laugh) в графические смайлы.

          отключается если что

          remove_action( 'init', 'smilies_init', 5 );

Здравствуйте, !

Ваш комментарий