unregister_widget()WP 2.8.0

Cancels the registration of a widget. Deletes the widget by the specified widget class name.

This function allows you to disable/cancel/remove any previously registered widget in WordPress.

When deleting a widget in this way, all its settings are also removed. That is, if the widget has a rich selection of settings and you canceled it, all settings will be lost...

No Hooks.

Returns

null. Nothing.

Usage

unregister_widget( $widget_class );
$widget_class(object) (required)

The name of the class that registers the widget by extending WP_Widget. Standard class names:

WP_Widget_Pages            // Pages widget
WP_Widget_Calendar         // Calendar
WP_Widget_Archives         // Archives
WP_Widget_Links            // Links
WP_Widget_Meta             // Meta widget
WP_Widget_Search           // Search
WP_Widget_Text             // Text
WP_Widget_Categories       // Categories
WP_Widget_Recent_Posts     // Recent posts
WP_Widget_Recent_Comments  // Recent comments
WP_Widget_RSS              // RSS
WP_Widget_Tag_Cloud        // Tag cloud
WP_Nav_Menu_Widget         // Menu
WP_Widget_Custom_HTML
WP_Widget_Media_Audio
WP_Widget_Media_Video
WP_Widget_Media_Gallery
WP_Widget_Media_Image

Examples

0

#1 Delete widget

This example shows how to unregister the Calendar widget. It may come in handy when you need to replace the standard widget with your own:

add_action( 'widgets_init', 'remove_calendar_widget' );

function remove_calendar_widget() {
	unregister_widget('WP_Widget_Calendar');
}
0

#2 Disable all standard WordPress widgets

To disable all basic widgets in WordPress, use this code:

// Disable standard WordPress widgets
add_action('widgets_init', 'unregister_basic_widgets' );

function unregister_basic_widgets() {

	unregister_widget('WP_Widget_Pages');           // Page widget
	unregister_widget('WP_Widget_Calendar');        // Calendar
	unregister_widget('WP_Widget_Archives');        // Archives
	unregister_widget('WP_Widget_Links');           // Links
	unregister_widget('WP_Widget_Meta');            // Meta widget
	unregister_widget('WP_Widget_Search');          // Search
	unregister_widget('WP_Widget_Text');            // Text
	unregister_widget('WP_Widget_Categories');      // Categories
	unregister_widget('WP_Widget_Recent_Posts');    // Recent posts
	unregister_widget('WP_Widget_Recent_Comments'); // Recent comments
	unregister_widget('WP_Widget_RSS');             // RSS
	unregister_widget('WP_Widget_Tag_Cloud');       // Tag cloud
	unregister_widget('WP_Nav_Menu_Widget');        // Menu
	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
}

Use this code in the theme file functions.php.

0

#3 Disabling widget support in WordPress

The example above shows how to disable all widgets by default and gives you a choice of which widgets to disable and which not.

But if you need to disable absolutely all widgets at once, it is better to do it before they are connected, i.e. not to connect them at all and not to call event which connects other widgets. To do this, detach function wp_widgets_init() from event init, like this:

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

Besides connection of widgets, function wp_widgets_init() calls event widgets_init to which hooks to enable widgets from plugins are usually hung. So when you disable this hook, most likely the plugin widgets and themes will not work. I.e., widget support will be disabled completely.

0

#4 Fundamental disabling of basic widgets

This example shows how to disable basic WordPress widgets. But it must be done in a way that disables the PHP plugin widget files and after disabling, the base widget classes do not exist: WP_Widget_Pages, WP_Widget_Search, etc. After this disabling, we can create our own widgets with the names of the base classes. This is, if I may say so, disabling the base widgets at the root.

Since this is a low-level setting, such code should be either in the regular plugin or in mandatory plugin, but not later.

remove_action( 'plugins_loaded', 'wp_maybe_load_widgets', 0 );
// turn on the event disabled in wp_maybe_load_widgets
add_action( '_admin_menu', 'wp_widgets_add_menu' );

// not to register widgets of classes that now do not exist at all...
remove_action( 'init', 'wp_widgets_init', 1 );

// turn on the event disabled in 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' );
}

After installing this code, all base widgets will be disabled, but the widget menu in the admin panel will remain working... And you can also write your own widgets with the names of PHP classes of the base widgets: WP_Widget_Pages, WP_Widget_Search, etc.

Notes

  • See: WP_Widget
  • Global. WP_Widget_Factory. $wp_widget_factory

Changelog

Since 2.8.0 Introduced.
Since 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() code WP 6.9.1

function unregister_widget( $widget ) {
	global $wp_widget_factory;

	$wp_widget_factory->unregister( $widget );
}