WP_Navigation_Block_Renderer::disable_overlay_menu_for_nested_navigation_blocksprivate staticWP 6.5.0

Recursively disables overlay menu for navigation blocks within overlay blocks. Prevents nested overlays (inception).

Method of the class: WP_Navigation_Block_Renderer{}

No Hooks.

Returns

Array. Modified blocks with overlayMenu set to 'never' for navigation blocks.

Usage

$result = WP_Navigation_Block_Renderer::disable_overlay_menu_for_nested_navigation_blocks( $blocks );
$blocks(array) (required)
Array of parsed block arrays.

Changelog

Since 6.5.0 Introduced.

WP_Navigation_Block_Renderer::disable_overlay_menu_for_nested_navigation_blocks() code WP 7.0

private static function disable_overlay_menu_for_nested_navigation_blocks( $blocks ) {
	if ( empty( $blocks ) || ! is_array( $blocks ) ) {
		return $blocks;
	}

	foreach ( $blocks as &$block ) {
		if ( ! isset( $block['blockName'] ) ) {
			continue;
		}

		// If this is a navigation block, disable its overlay menu.
		if ( 'core/navigation' === $block['blockName'] ) {
			if ( ! isset( $block['attrs'] ) ) {
				$block['attrs'] = array();
			}
			$block['attrs']['overlayMenu'] = 'never';
			// Mark this as a nested navigation within an overlay template part
			// so we can handle its rendering differently.
			$block['attrs']['_isWithinOverlayTemplatePart'] = true;
		}

		// Recursively process inner blocks.
		if ( ! empty( $block['innerBlocks'] ) && is_array( $block['innerBlocks'] ) ) {
			$block['innerBlocks'] = static::disable_overlay_menu_for_nested_navigation_blocks( $block['innerBlocks'] );
		}
	}

	return $blocks;
}