wp/wp-includes/blocks/widget-group.php
changeset 19 3d72ae0968f4
child 21 48c4eec2b7e6
equal deleted inserted replaced
18:be944660c56a 19:3d72ae0968f4
       
     1 <?php
       
     2 /**
       
     3  * Server-side rendering of the `core/widget-group` block.
       
     4  *
       
     5  * @package WordPress
       
     6  */
       
     7 
       
     8 /**
       
     9  * Renders the 'core/widget-group' block.
       
    10  *
       
    11  * @param array    $attributes The block attributes.
       
    12  * @param string   $content The block content.
       
    13  * @param WP_Block $block The block.
       
    14  *
       
    15  * @return string Rendered block.
       
    16  */
       
    17 function render_block_core_widget_group( $attributes, $content, $block ) {
       
    18 	global $wp_registered_sidebars, $_sidebar_being_rendered;
       
    19 
       
    20 	if ( isset( $wp_registered_sidebars[ $_sidebar_being_rendered ] ) ) {
       
    21 		$before_title = $wp_registered_sidebars[ $_sidebar_being_rendered ]['before_title'];
       
    22 		$after_title  = $wp_registered_sidebars[ $_sidebar_being_rendered ]['after_title'];
       
    23 	} else {
       
    24 		$before_title = '<h2 class="widget-title">';
       
    25 		$after_title  = '</h2>';
       
    26 	}
       
    27 
       
    28 	$html = '';
       
    29 
       
    30 	if ( ! empty( $attributes['title'] ) ) {
       
    31 		$html .= $before_title . $attributes['title'] . $after_title;
       
    32 	}
       
    33 
       
    34 	$html .= '<div class="wp-widget-group__inner-blocks">';
       
    35 	foreach ( $block->inner_blocks as $inner_block ) {
       
    36 		$html .= $inner_block->render();
       
    37 	}
       
    38 	$html .= '</div>';
       
    39 
       
    40 	return $html;
       
    41 }
       
    42 
       
    43 /**
       
    44  * Registers the 'core/widget-group' block.
       
    45  */
       
    46 function register_block_core_widget_group() {
       
    47 	register_block_type_from_metadata(
       
    48 		__DIR__ . '/widget-group',
       
    49 		array(
       
    50 			'render_callback' => 'render_block_core_widget_group',
       
    51 		)
       
    52 	);
       
    53 }
       
    54 
       
    55 add_action( 'init', 'register_block_core_widget_group' );
       
    56 
       
    57 /**
       
    58  * Make a note of the sidebar being rendered before WordPress starts rendering
       
    59  * it. This lets us get to the current sidebar in
       
    60  * render_block_core_widget_group().
       
    61  *
       
    62  * @param int|string $index       Index, name, or ID of the dynamic sidebar.
       
    63  */
       
    64 function note_sidebar_being_rendered( $index ) {
       
    65 	global $_sidebar_being_rendered;
       
    66 	$_sidebar_being_rendered = $index;
       
    67 }
       
    68 add_action( 'dynamic_sidebar_before', 'note_sidebar_being_rendered' );
       
    69 
       
    70 /**
       
    71  * Clear whatever we set in note_sidebar_being_rendered() after WordPress
       
    72  * finishes rendering a sidebar.
       
    73  */
       
    74 function discard_sidebar_being_rendered() {
       
    75 	global $_sidebar_being_rendered;
       
    76 	unset( $_sidebar_being_rendered );
       
    77 }
       
    78 add_action( 'dynamic_sidebar_after', 'discard_sidebar_being_rendered' );