WP_Navigation_Block_Renderer::disable_overlay_menu_for_nested_navigation_blocks
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() 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;
}