* Server-side rendering of the `core/widget-group` block.
* Renders the 'core/widget-group' block.
* @global array $wp_registered_sidebars
* @global int|string $_sidebar_being_rendered
* @param array $attributes The block attributes.
* @param string $content The block content.
* @param WP_Block $block The block.
* @return string Rendered block.
function render_block_core_widget_group( $attributes, $content, $block ) {
global $wp_registered_sidebars, $_sidebar_being_rendered;
if ( isset( $wp_registered_sidebars[ $_sidebar_being_rendered ] ) ) {
$before_title = $wp_registered_sidebars[ $_sidebar_being_rendered ]['before_title'];
$after_title = $wp_registered_sidebars[ $_sidebar_being_rendered ]['after_title'];
$before_title = '<h2 class="widget-title">';
if ( ! empty( $attributes['title'] ) ) {
$html .= $before_title . esc_html( $attributes['title'] ) . $after_title;
$html .= '<div class="wp-widget-group__inner-blocks">';
foreach ( $block->inner_blocks as $inner_block ) {
$html .= $inner_block->render();
* Registers the 'core/widget-group' block.
function register_block_core_widget_group() {
register_block_type_from_metadata(
__DIR__ . '/widget-group',
'render_callback' => 'render_block_core_widget_group',
add_action( 'init', 'register_block_core_widget_group' );
* Make a note of the sidebar being rendered before WordPress starts rendering
* it. This lets us get to the current sidebar in
* render_block_core_widget_group().
* @global int|string $_sidebar_being_rendered
* @param int|string $index Index, name, or ID of the dynamic sidebar.
function note_sidebar_being_rendered( $index ) {
global $_sidebar_being_rendered;
$_sidebar_being_rendered = $index;
add_action( 'dynamic_sidebar_before', 'note_sidebar_being_rendered' );
* Clear whatever we set in note_sidebar_being_rendered() after WordPress
* finishes rendering a sidebar.
* @global int|string $_sidebar_being_rendered
function discard_sidebar_being_rendered() {
global $_sidebar_being_rendered;
unset( $_sidebar_being_rendered );
add_action( 'dynamic_sidebar_after', 'discard_sidebar_being_rendered' );