wp-includes/blocks/navigation.php:378Gets the inner blocks for the navigation block from an overlay template part.
$overlay_template_part_idstring$attributesarrayWP_Block_List private static function get_overlay_blocks_from_template_part( $overlay_template_part_id, $attributes ) { if ( empty( $overlay_template_part_id ) || ! is_string( $overlay_template_part_id ) ) { return new WP_Block_List( array(), $attributes ); } // Parse the template part ID (format: "theme//slug"). // If it's just a slug, construct the full ID using the current theme. $parts = explode( '//', $overlay_template_part_id, 2 ); if ( count( $parts ) === 2 ) { // Already in "theme//slug" format (backward compatibility). $theme = $parts[0]; $slug = $parts[1]; } else { // Just a slug, use current theme. $theme = get_stylesheet(); $slug = $overlay_template_part_id; } // Only query for template parts from the active theme. if ( get_stylesheet() !== $theme ) { return new WP_Block_List( array(), $attributes ); } // Query for the template part post. $template_part_query = new WP_Query( array( 'post_type' => 'wp_template_part', 'post_status' => 'publish', 'post_name__in' => array( $slug ), 'tax_query' => array( array( 'taxonomy' => 'wp_theme', 'field' => 'name', 'terms' => $theme, ), ), 'posts_per_page' => 1, 'no_found_rows' => true, 'lazy_load_term_meta' => false, // Do not lazy load term meta, as template parts only have one term. ) ); $template_part_post = $template_part_query->have_posts() ? $template_part_query->next_post() : null; if ( ! $template_part_post ) { // Try to get from theme file if not in database. // Construct the full template part ID for get_block_file_template. $full_template_part_id = $theme . '//' . $slug; $block_template = get_block_file_template( $full_template_part_id, 'wp_template_part' ); if ( isset( $block_template->content ) ) { // Expand shortcodes before parsing blocks, matching the order in // `render_block_core_template_part()`. $content = shortcode_unautop( $block_template->content ); $content = do_shortcode( $content ); $parsed_blocks = parse_blocks( $content ); $blocks = block_core_navigation_filter_out_empty_blocks( $parsed_blocks ); // Disable overlay menu for any navigation blocks within the overlay to prevent nested overlays. $blocks = static::disable_overlay_menu_for_nested_navigation_blocks( $blocks ); return new WP_Block_List( $blocks, $attributes ); } return new WP_Block_List( array(), $attributes ); } // Get the template part content. $block_template = _build_block_template_result_from_post( $template_part_post ); if ( ! isset( $block_template->content ) ) { return new WP_Block_List( array(), $attributes ); } $parsed_blocks = parse_blocks( $block_template->content ); // 'parse_blocks' includes a null block with '\n\n' as the content when // it encounters whitespace. This code strips it. $blocks = block_core_navigation_filter_out_empty_blocks( $parsed_blocks ); // Re-serialize, and run Block Hooks algorithm to inject hooked blocks. $markup = serialize_blocks( $blocks ); $markup = apply_block_hooks_to_content_from_post_object( $markup, $template_part_post ); // Expand shortcodes before parsing blocks, matching the order inIntroduced in 6.5.0. Unchanged from 7.0.4 through 7.1.0.
Signature, return type and hooks compared across 2 parsed releases.
src/wp-includes/blocks/navigation.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it.