Action Hook since 2.2.0
widgets_init
Fires when it's time to register widgets and sidebars
Description
widgets_init is exclusively for register_sidebar() and register_widget() calls — nothing else belongs here.
When it runs
During init processing, after core's own default widgets are registered.
Signature
do_action( 'widgets_init' );Examples
Basic
add_action( 'widgets_init', function() {
register_sidebar( [
'name' => 'Footer Widgets',
'id' => 'footer-widgets',
'before_widget' => '<div class="widget %2$s">',
'after_widget' => '</div>',
] );
} );Register a footer widget area for the theme.
Common Use Cases
- Register sidebar/widget areas
- Register custom WP_Widget classes
- Unregister default widgets
Common mistakes
- Calling register_sidebar() outside widgets_init — the sidebar silently never appears in Appearance > Widgets
Related hooks
FAQ
Why doesn't my sidebar show up in the widgets screen?
register_sidebar() must run on the widgets_init hook — calling it earlier or later means WordPress never registers the widget area.
Source: wp-includes/widgets.php