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 Отключаем все стандартные виджеты 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.
#2 Удалим виджет
Этот пример показывает как отменить регистрацию виджета Календарь. Может пригодится когда нужно заменить стандартный виджет на свой:
add_action( 'widgets_init', 'remove_calendar_widget' );
function remove_calendar_widget() {
unregister_widget('WP_Widget_Calendar');
} #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.9
function unregister_widget( $widget ) {
global $wp_widget_factory;
$wp_widget_factory->unregister( $widget );
}