unregister_widget()
Отменяет регистрацию виджета. Удаляет виджет по указанному названию класса виджета.
Эта функция позволяет отключить/отменить/удалить любой ранее зарегистрированный виджет в WordPress.
При удалении виджета таким способом, также удаляются все его настройки. Т.е. если виджет имеет богатый выбор настроек и вы его отменили, то все настройки будут потеряны...
Хуков нет.
Возвращает
null
. Ничего.
Использование
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 // Меню WP_Widget_Custom_HTML WP_Widget_Media_Audio WP_Widget_Media_Video WP_Widget_Media_Gallery WP_Widget_Media_Image
Примеры
#1 Удалим виджет
Этот пример показывает как отменить регистрацию виджета Календарь. Может пригодится когда нужно заменить стандартный виджет на свой:
add_action( 'widgets_init', 'remove_calendar_widget' ); function remove_calendar_widget() { unregister_widget('WP_Widget_Calendar'); }
#2 Отключаем все стандартные виджеты 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.
#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 и т.д.
Заметки
- Смотрите: WP_Widget
- Global. WP_Widget_Factory. $wp_widget_factory
Список изменений
С версии 2.8.0 | Введена. |
С версии 4.6.0 | Updated the $widget parameter to also accept a WP_Widget instance object instead of simply a WP_Widget subclass name. |
Код unregister_widget() unregister widget WP 6.7.1
function unregister_widget( $widget ) { global $wp_widget_factory; $wp_widget_factory->unregister( $widget ); }