wp-includes/blocks/navigation-submenu.php:76Renders the core/navigation-submenu block.
$attributesarray$contentstring$blockWP_Blockstringfunction render_block_core_navigation_submenu( $attributes, $content, $block ) { // Check if this navigation item should render based on post status. if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ) { $should_render = gutenberg_block_core_shared_navigation_item_should_render( $attributes, $block ); } else { $should_render = block_core_shared_navigation_item_should_render( $attributes, $block ); } if ( ! $should_render ) { return ''; } // Don't render the block's subtree if it has no label. if ( empty( $attributes['label'] ) ) { return ''; } // Render inner blocks first to check if any menu items will actually display. $inner_blocks_html = ''; foreach ( $block->inner_blocks as $inner_block ) { $inner_blocks_html .= $inner_block->render(); } $has_submenu = ! empty( trim( $inner_blocks_html ) ); $kind = empty( $attributes['kind'] ) ? 'post_type' : str_replace( '-', '_', $attributes['kind'] ); $is_active = ! empty( $attributes['id'] ) && get_queried_object_id() === (int) $attributes['id'] && ! empty( get_queried_object()->$kind ); if ( is_post_type_archive() && ! empty( $attributes['url'] ) ) { $queried_archive_link = get_post_type_archive_link( get_queried_object()->name ); if ( $attributes['url'] === $queried_archive_link ) { $is_active = true; } } $show_submenu_indicators = isset( $block->context['showSubmenuIcon'] ) && $block->context['showSubmenuIcon']; $computed_visibility = block_core_navigation_submenu_get_submenu_visibility( $block->context ); $open_on_click = 'click' === $computed_visibility; $open_on_hover = 'hover' === $computed_visibility; $open_on_hover_and_click = $open_on_hover && $show_submenu_indicators; $classes = array( 'wp-block-navigation-item', ); if ( $has_submenu ) { $classes[] = 'has-child'; } if ( $open_on_click ) { $classes[] = 'open-on-click'; } if ( $open_on_hover_and_click ) { $classes[] = 'open-on-hover-click'; } if ( 'always' === $computed_visibility ) { $classes[] = 'open-always'; } if ( $is_active ) { $classes[] = 'current-menu-item'; } $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ), ) ); $label = ''; if ( isset( $attributes['label'] ) ) { $label .= wp_kses_post( $attributes['label'] ); } $aria_label = sprintf( /* translators: Accessibility text. %s: Parent page title. */ __( '%s submenu' ), wp_strip_all_tags( $label ) ); $html = '<li ' . $wrapper_attributes . '>'; // If Submenus open on hover or are always open, we render an anchor tag with attributes.Introduced in 5.9.0. Unchanged from 6.7.7 through 7.1.0.
Signature, return type and hooks compared across 5 parsed releases.
src/wp-includes/blocks/navigation-submenu.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it.