render_block_core_template_part

The timeline below displays how wordpress function render_block_core_template_part has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.5

/**
 * Server-side rendering of the `core/template-part` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/template-part` block on the server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string The render.
 */
function render_block_core_template_part($attributes)
{
    static $seen_ids = array();
    $template_part_id = null;
    $content = null;
    $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
    $theme = isset($attributes['theme']) ? $attributes['theme'] : get_stylesheet();
    if (isset($attributes['slug']) && get_stylesheet() === $theme) {
        $template_part_id = $theme . '//' . $attributes['slug'];
        $template_part_query = new WP_Query(array('post_type' => 'wp_template_part', 'post_status' => 'publish', 'post_name__in' => array($attributes['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));
        $template_part_post = $template_part_query->have_posts() ? $template_part_query->next_post() : null;
        if ($template_part_post) {
            // A published post might already exist if this template part was customized elsewhere
            // or if it's part of a customized template.
            $block_template = _build_block_template_result_from_post($template_part_post);
            $content = $block_template->content;
            if (isset($block_template->area)) {
                $area = $block_template->area;
            }
            /**
             * Fires when a block template part is loaded from a template post stored in the database.
             *
             * @since 5.9.0
             *
             * @param string  $template_part_id   The requested template part namespaced to the theme.
             * @param array   $attributes         The block attributes.
             * @param WP_Post $template_part_post The template part post object.
             * @param string  $content            The template part content.
             */
            do_action('render_block_core_template_part_post', $template_part_id, $attributes, $template_part_post, $content);
        } else {
            $template_part_file_path = '';
            // Else, if the template part was provided by the active theme,
            // render the corresponding file content.
            if (0 === validate_file($attributes['slug'])) {
                $block_template = get_block_file_template($template_part_id, 'wp_template_part');
                $content = $block_template->content;
                if (isset($block_template->area)) {
                    $area = $block_template->area;
                }
                // Needed for the `render_block_core_template_part_file` and `render_block_core_template_part_none` actions below.
                $block_template_file = _get_block_template_file('wp_template_part', $attributes['slug']);
                if ($block_template_file) {
                    $template_part_file_path = $block_template_file['path'];
                }
            }
            if ('' !== $content && null !== $content) {
                /**
                 * Fires when a block template part is loaded from a template part in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the template path.
                 * @param string $content                 The template part content.
                 */
                do_action('render_block_core_template_part_file', $template_part_id, $attributes, $template_part_file_path, $content);
            } else {
                /**
                 * Fires when a requested block template part does not exist in the database nor in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the not found template path.
                 */
                do_action('render_block_core_template_part_none', $template_part_id, $attributes, $template_part_file_path);
            }
        }
    }
    // WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent
    // is set in `wp_debug_mode()`.
    $is_debug = WP_DEBUG && WP_DEBUG_DISPLAY;
    if (is_null($content)) {
        if ($is_debug && isset($attributes['slug'])) {
            return sprintf(
                /* translators: %s: Template part slug. */
                __('Template part has been deleted or is unavailable: %s'),
                $attributes['slug']
            );
        }
        return '';
    }
    if (isset($seen_ids[$template_part_id])) {
        return $is_debug ? __('[block rendering halted]') : '';
    }
    // Look up area definition.
    $area_definition = null;
    $defined_areas = get_allowed_block_template_part_areas();
    foreach ($defined_areas as $defined_area) {
        if ($defined_area['area'] === $area) {
            $area_definition = $defined_area;
            break;
        }
    }
    // If $area is not allowed, set it back to the uncategorized default.
    if (!$area_definition) {
        $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
    }
    // Run through the actions that are typically taken on the_content.
    $content = shortcode_unautop($content);
    $content = do_shortcode($content);
    $seen_ids[$template_part_id] = true;
    $content = do_blocks($content);
    unset($seen_ids[$template_part_id]);
    $content = wptexturize($content);
    $content = convert_smilies($content);
    $content = wp_filter_content_tags($content, "template_part_{$area}");
    // Handle embeds for block template parts.
    global $wp_embed;
    $content = $wp_embed->autoembed($content);
    if (empty($attributes['tagName'])) {
        $area_tag = 'div';
        if ($area_definition && isset($area_definition['area_tag'])) {
            $area_tag = $area_definition['area_tag'];
        }
        $html_tag = $area_tag;
    } else {
        $html_tag = esc_attr($attributes['tagName']);
    }
    $wrapper_attributes = get_block_wrapper_attributes();
    return "<{$html_tag} {$wrapper_attributes}>" . str_replace(']]>', ']]&gt;', $content) . "</{$html_tag}>";
}

WordPress Version: 6.4

/**
 * Server-side rendering of the `core/template-part` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/template-part` block on the server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string The render.
 */
function render_block_core_template_part($attributes)
{
    static $seen_ids = array();
    $template_part_id = null;
    $content = null;
    $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
    $theme = isset($attributes['theme']) ? $attributes['theme'] : get_stylesheet();
    if (isset($attributes['slug']) && get_stylesheet() === $theme) {
        $template_part_id = $theme . '//' . $attributes['slug'];
        $template_part_query = new WP_Query(array('post_type' => 'wp_template_part', 'post_status' => 'publish', 'post_name__in' => array($attributes['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));
        $template_part_post = $template_part_query->have_posts() ? $template_part_query->next_post() : null;
        if ($template_part_post) {
            // A published post might already exist if this template part was customized elsewhere
            // or if it's part of a customized template.
            $content = $template_part_post->post_content;
            $area_terms = get_the_terms($template_part_post, 'wp_template_part_area');
            if (!is_wp_error($area_terms) && false !== $area_terms) {
                $area = $area_terms[0]->name;
            }
            /**
             * Fires when a block template part is loaded from a template post stored in the database.
             *
             * @since 5.9.0
             *
             * @param string  $template_part_id   The requested template part namespaced to the theme.
             * @param array   $attributes         The block attributes.
             * @param WP_Post $template_part_post The template part post object.
             * @param string  $content            The template part content.
             */
            do_action('render_block_core_template_part_post', $template_part_id, $attributes, $template_part_post, $content);
        } else {
            $template_part_file_path = '';
            // Else, if the template part was provided by the active theme,
            // render the corresponding file content.
            if (0 === validate_file($attributes['slug'])) {
                $block_template = get_block_file_template($template_part_id, 'wp_template_part');
                $content = $block_template->content;
                if (isset($block_template->area)) {
                    $area = $block_template->area;
                }
            }
            if ('' !== $content && null !== $content) {
                /**
                 * Fires when a block template part is loaded from a template part in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the template path.
                 * @param string $content                 The template part content.
                 */
                do_action('render_block_core_template_part_file', $template_part_id, $attributes, $template_part_file_path, $content);
            } else {
                /**
                 * Fires when a requested block template part does not exist in the database nor in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the not found template path.
                 */
                do_action('render_block_core_template_part_none', $template_part_id, $attributes, $template_part_file_path);
            }
        }
    }
    // WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent
    // is set in `wp_debug_mode()`.
    $is_debug = WP_DEBUG && WP_DEBUG_DISPLAY;
    if (is_null($content) && $is_debug) {
        if (!isset($attributes['slug'])) {
            // If there is no slug this is a placeholder and we dont want to return any message.
            return;
        }
        return sprintf(
            /* translators: %s: Template part slug. */
            __('Template part has been deleted or is unavailable: %s'),
            $attributes['slug']
        );
    }
    if (isset($seen_ids[$template_part_id])) {
        return $is_debug ? __('[block rendering halted]') : '';
    }
    // Look up area definition.
    $area_definition = null;
    $defined_areas = get_allowed_block_template_part_areas();
    foreach ($defined_areas as $defined_area) {
        if ($defined_area['area'] === $area) {
            $area_definition = $defined_area;
            break;
        }
    }
    // If $area is not allowed, set it back to the uncategorized default.
    if (!$area_definition) {
        $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
    }
    // Run through the actions that are typically taken on the_content.
    $content = shortcode_unautop($content);
    $content = do_shortcode($content);
    $seen_ids[$template_part_id] = true;
    $content = do_blocks($content);
    unset($seen_ids[$template_part_id]);
    $content = wptexturize($content);
    $content = convert_smilies($content);
    $content = wp_filter_content_tags($content, "template_part_{$area}");
    // Handle embeds for block template parts.
    global $wp_embed;
    $content = $wp_embed->autoembed($content);
    if (empty($attributes['tagName'])) {
        $area_tag = 'div';
        if ($area_definition && isset($area_definition['area_tag'])) {
            $area_tag = $area_definition['area_tag'];
        }
        $html_tag = $area_tag;
    } else {
        $html_tag = esc_attr($attributes['tagName']);
    }
    $wrapper_attributes = get_block_wrapper_attributes();
    return "<{$html_tag} {$wrapper_attributes}>" . str_replace(']]>', ']]&gt;', $content) . "</{$html_tag}>";
}

WordPress Version: 6.3

/**
 * Server-side rendering of the `core/template-part` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/template-part` block on the server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string The render.
 */
function render_block_core_template_part($attributes)
{
    static $seen_ids = array();
    $template_part_id = null;
    $content = null;
    $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
    if (isset($attributes['slug']) && isset($attributes['theme']) && get_stylesheet() === $attributes['theme']) {
        $template_part_id = $attributes['theme'] . '//' . $attributes['slug'];
        $template_part_query = new WP_Query(array('post_type' => 'wp_template_part', 'post_status' => 'publish', 'post_name__in' => array($attributes['slug']), 'tax_query' => array(array('taxonomy' => 'wp_theme', 'field' => 'name', 'terms' => $attributes['theme'])), 'posts_per_page' => 1, 'no_found_rows' => true, 'lazy_load_term_meta' => false));
        $template_part_post = $template_part_query->have_posts() ? $template_part_query->next_post() : null;
        if ($template_part_post) {
            // A published post might already exist if this template part was customized elsewhere
            // or if it's part of a customized template.
            $content = $template_part_post->post_content;
            $area_terms = get_the_terms($template_part_post, 'wp_template_part_area');
            if (!is_wp_error($area_terms) && false !== $area_terms) {
                $area = $area_terms[0]->name;
            }
            /**
             * Fires when a block template part is loaded from a template post stored in the database.
             *
             * @since 5.9.0
             *
             * @param string  $template_part_id   The requested template part namespaced to the theme.
             * @param array   $attributes         The block attributes.
             * @param WP_Post $template_part_post The template part post object.
             * @param string  $content            The template part content.
             */
            do_action('render_block_core_template_part_post', $template_part_id, $attributes, $template_part_post, $content);
        } else {
            $template_part_file_path = '';
            // Else, if the template part was provided by the active theme,
            // render the corresponding file content.
            if (0 === validate_file($attributes['slug'])) {
                $block_template_file = _get_block_template_file('wp_template_part', $attributes['slug']);
                if ($block_template_file) {
                    $template_part_file_path = $block_template_file['path'];
                    $content = (string) file_get_contents($template_part_file_path);
                    $content = ('' !== $content) ? _inject_theme_attribute_in_block_template_content($content) : '';
                    if (isset($block_template_file['area'])) {
                        $area = $block_template_file['area'];
                    }
                }
            }
            if ('' !== $content && null !== $content) {
                /**
                 * Fires when a block template part is loaded from a template part in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the template path.
                 * @param string $content                 The template part content.
                 */
                do_action('render_block_core_template_part_file', $template_part_id, $attributes, $template_part_file_path, $content);
            } else {
                /**
                 * Fires when a requested block template part does not exist in the database nor in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the not found template path.
                 */
                do_action('render_block_core_template_part_none', $template_part_id, $attributes, $template_part_file_path);
            }
        }
    }
    // WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent
    // is set in `wp_debug_mode()`.
    $is_debug = WP_DEBUG && WP_DEBUG_DISPLAY;
    if (is_null($content) && $is_debug) {
        if (!isset($attributes['slug'])) {
            // If there is no slug this is a placeholder and we dont want to return any message.
            return;
        }
        return sprintf(
            /* translators: %s: Template part slug. */
            __('Template part has been deleted or is unavailable: %s'),
            $attributes['slug']
        );
    }
    if (isset($seen_ids[$template_part_id])) {
        return $is_debug ? __('[block rendering halted]') : '';
    }
    // Look up area definition.
    $area_definition = null;
    $defined_areas = get_allowed_block_template_part_areas();
    foreach ($defined_areas as $defined_area) {
        if ($defined_area['area'] === $area) {
            $area_definition = $defined_area;
            break;
        }
    }
    // If $area is not allowed, set it back to the uncategorized default.
    if (!$area_definition) {
        $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
    }
    // Run through the actions that are typically taken on the_content.
    $content = shortcode_unautop($content);
    $content = do_shortcode($content);
    $seen_ids[$template_part_id] = true;
    $content = do_blocks($content);
    unset($seen_ids[$template_part_id]);
    $content = wptexturize($content);
    $content = convert_smilies($content);
    $content = wp_filter_content_tags($content, "template_part_{$area}");
    // Handle embeds for block template parts.
    global $wp_embed;
    $content = $wp_embed->autoembed($content);
    if (empty($attributes['tagName'])) {
        $area_tag = 'div';
        if ($area_definition && isset($area_definition['area_tag'])) {
            $area_tag = $area_definition['area_tag'];
        }
        $html_tag = $area_tag;
    } else {
        $html_tag = esc_attr($attributes['tagName']);
    }
    $wrapper_attributes = get_block_wrapper_attributes();
    return "<{$html_tag} {$wrapper_attributes}>" . str_replace(']]>', ']]&gt;', $content) . "</{$html_tag}>";
}

WordPress Version: 2.2

/**
 * Server-side rendering of the `core/template-part` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/template-part` block on the server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string The render.
 */
function render_block_core_template_part($attributes)
{
    static $seen_ids = array();
    $template_part_id = null;
    $content = null;
    $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
    if (isset($attributes['slug']) && isset($attributes['theme']) && get_stylesheet() === $attributes['theme']) {
        $template_part_id = $attributes['theme'] . '//' . $attributes['slug'];
        $template_part_query = new WP_Query(array('post_type' => 'wp_template_part', 'post_status' => 'publish', 'post_name__in' => array($attributes['slug']), 'tax_query' => array(array('taxonomy' => 'wp_theme', 'field' => 'name', 'terms' => $attributes['theme'])), 'posts_per_page' => 1, 'no_found_rows' => true));
        $template_part_post = $template_part_query->have_posts() ? $template_part_query->next_post() : null;
        if ($template_part_post) {
            // A published post might already exist if this template part was customized elsewhere
            // or if it's part of a customized template.
            $content = $template_part_post->post_content;
            $area_terms = get_the_terms($template_part_post, 'wp_template_part_area');
            if (!is_wp_error($area_terms) && false !== $area_terms) {
                $area = $area_terms[0]->name;
            }
            /**
             * Fires when a block template part is loaded from a template post stored in the database.
             *
             * @since 5.9.0
             *
             * @param string  $template_part_id   The requested template part namespaced to the theme.
             * @param array   $attributes         The block attributes.
             * @param WP_Post $template_part_post The template part post object.
             * @param string  $content            The template part content.
             */
            do_action('render_block_core_template_part_post', $template_part_id, $attributes, $template_part_post, $content);
        } else {
            // Else, if the template part was provided by the active theme,
            // render the corresponding file content.
            $parent_theme_folders = get_block_theme_folders(get_template());
            $child_theme_folders = get_block_theme_folders(get_stylesheet());
            $child_theme_part_file_path = get_theme_file_path('/' . $child_theme_folders['wp_template_part'] . '/' . $attributes['slug'] . '.html');
            $parent_theme_part_file_path = get_theme_file_path('/' . $parent_theme_folders['wp_template_part'] . '/' . $attributes['slug'] . '.html');
            $template_part_file_path = (0 === validate_file($attributes['slug']) && file_exists($child_theme_part_file_path)) ? $child_theme_part_file_path : $parent_theme_part_file_path;
            if (0 === validate_file($attributes['slug']) && file_exists($template_part_file_path)) {
                $content = file_get_contents($template_part_file_path);
                $content = (is_string($content) && '' !== $content) ? _inject_theme_attribute_in_block_template_content($content) : '';
            }
            if ('' !== $content && null !== $content) {
                /**
                 * Fires when a block template part is loaded from a template part in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the template path.
                 * @param string $content                 The template part content.
                 */
                do_action('render_block_core_template_part_file', $template_part_id, $attributes, $template_part_file_path, $content);
            } else {
                /**
                 * Fires when a requested block template part does not exist in the database nor in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the not found template path.
                 */
                do_action('render_block_core_template_part_none', $template_part_id, $attributes, $template_part_file_path);
            }
        }
    }
    // WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent
    // is set in `wp_debug_mode()`.
    $is_debug = WP_DEBUG && WP_DEBUG_DISPLAY;
    if (is_null($content) && $is_debug) {
        if (!isset($attributes['slug'])) {
            // If there is no slug this is a placeholder and we dont want to return any message.
            return;
        }
        return sprintf(
            /* translators: %s: Template part slug. */
            __('Template part has been deleted or is unavailable: %s'),
            $attributes['slug']
        );
    }
    if (isset($seen_ids[$template_part_id])) {
        return $is_debug ? __('[block rendering halted]') : '';
    }
    // Look up area definition.
    $area_definition = null;
    $defined_areas = get_allowed_block_template_part_areas();
    foreach ($defined_areas as $defined_area) {
        if ($defined_area['area'] === $area) {
            $area_definition = $defined_area;
            break;
        }
    }
    // If $area is not allowed, set it back to the uncategorized default.
    if (!$area_definition) {
        $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
    }
    // Run through the actions that are typically taken on the_content.
    $content = shortcode_unautop($content);
    $content = do_shortcode($content);
    $seen_ids[$template_part_id] = true;
    $content = do_blocks($content);
    unset($seen_ids[$template_part_id]);
    $content = wptexturize($content);
    $content = convert_smilies($content);
    $content = wp_filter_content_tags($content, "template_part_{$area}");
    // Handle embeds for block template parts.
    global $wp_embed;
    $content = $wp_embed->autoembed($content);
    if (empty($attributes['tagName'])) {
        $area_tag = 'div';
        if ($area_definition && isset($area_definition['area_tag'])) {
            $area_tag = $area_definition['area_tag'];
        }
        $html_tag = $area_tag;
    } else {
        $html_tag = esc_attr($attributes['tagName']);
    }
    $wrapper_attributes = get_block_wrapper_attributes();
    return "<{$html_tag} {$wrapper_attributes}>" . str_replace(']]>', ']]&gt;', $content) . "</{$html_tag}>";
}

WordPress Version: 6.2

/**
 * Server-side rendering of the `core/template-part` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/template-part` block on the server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string The render.
 */
function render_block_core_template_part($attributes)
{
    static $seen_ids = array();
    $template_part_id = null;
    $content = null;
    $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
    if (isset($attributes['slug']) && isset($attributes['theme']) && get_stylesheet() === $attributes['theme']) {
        $template_part_id = $attributes['theme'] . '//' . $attributes['slug'];
        $template_part_query = new WP_Query(array('post_type' => 'wp_template_part', 'post_status' => 'publish', 'post_name__in' => array($attributes['slug']), 'tax_query' => array(array('taxonomy' => 'wp_theme', 'field' => 'name', 'terms' => $attributes['theme'])), 'posts_per_page' => 1, 'no_found_rows' => true));
        $template_part_post = $template_part_query->have_posts() ? $template_part_query->next_post() : null;
        if ($template_part_post) {
            // A published post might already exist if this template part was customized elsewhere
            // or if it's part of a customized template.
            $content = $template_part_post->post_content;
            $area_terms = get_the_terms($template_part_post, 'wp_template_part_area');
            if (!is_wp_error($area_terms) && false !== $area_terms) {
                $area = $area_terms[0]->name;
            }
            /**
             * Fires when a block template part is loaded from a template post stored in the database.
             *
             * @since 5.9.0
             *
             * @param string  $template_part_id   The requested template part namespaced to the theme.
             * @param array   $attributes         The block attributes.
             * @param WP_Post $template_part_post The template part post object.
             * @param string  $content            The template part content.
             */
            do_action('render_block_core_template_part_post', $template_part_id, $attributes, $template_part_post, $content);
        } else {
            // Else, if the template part was provided by the active theme,
            // render the corresponding file content.
            $parent_theme_folders = get_block_theme_folders(get_template());
            $child_theme_folders = get_block_theme_folders(get_stylesheet());
            $child_theme_part_file_path = get_theme_file_path('/' . $child_theme_folders['wp_template_part'] . '/' . $attributes['slug'] . '.html');
            $parent_theme_part_file_path = get_theme_file_path('/' . $parent_theme_folders['wp_template_part'] . '/' . $attributes['slug'] . '.html');
            $template_part_file_path = (0 === validate_file($attributes['slug']) && file_exists($child_theme_part_file_path)) ? $child_theme_part_file_path : $parent_theme_part_file_path;
            if (0 === validate_file($attributes['slug']) && file_exists($template_part_file_path)) {
                $content = file_get_contents($template_part_file_path);
                $content = (is_string($content) && '' !== $content) ? _inject_theme_attribute_in_block_template_content($content) : '';
            }
            if ('' !== $content && null !== $content) {
                /**
                 * Fires when a block template part is loaded from a template part in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the template path.
                 * @param string $content                 The template part content.
                 */
                do_action('render_block_core_template_part_file', $template_part_id, $attributes, $template_part_file_path, $content);
            } else {
                /**
                 * Fires when a requested block template part does not exist in the database nor in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the not found template path.
                 */
                do_action('render_block_core_template_part_none', $template_part_id, $attributes, $template_part_file_path);
            }
        }
    }
    // WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent
    // is set in `wp_debug_mode()`.
    $is_debug = WP_DEBUG && WP_DEBUG_DISPLAY;
    if (is_null($content) && $is_debug) {
        if (!isset($attributes['slug'])) {
            // If there is no slug this is a placeholder and we dont want to return any message.
            return;
        }
        return sprintf(
            /* translators: %s: Template part slug. */
            __('Template part has been deleted or is unavailable: %s'),
            $attributes['slug']
        );
    }
    if (isset($seen_ids[$template_part_id])) {
        return $is_debug ? __('[block rendering halted]') : '';
    }
    // Look up area definition.
    $area_definition = null;
    $defined_areas = get_allowed_block_template_part_areas();
    foreach ($defined_areas as $defined_area) {
        if ($defined_area['area'] === $area) {
            $area_definition = $defined_area;
            break;
        }
    }
    // If $area is not allowed, set it back to the uncategorized default.
    if (!$area_definition) {
        $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
    }
    // Run through the actions that are typically taken on the_content.
    $seen_ids[$template_part_id] = true;
    $content = do_blocks($content);
    unset($seen_ids[$template_part_id]);
    $content = wptexturize($content);
    $content = convert_smilies($content);
    $content = shortcode_unautop($content);
    $content = wp_filter_content_tags($content, "template_part_{$area}");
    $content = do_shortcode($content);
    // Handle embeds for block template parts.
    global $wp_embed;
    $content = $wp_embed->autoembed($content);
    if (empty($attributes['tagName'])) {
        $area_tag = 'div';
        if ($area_definition && isset($area_definition['area_tag'])) {
            $area_tag = $area_definition['area_tag'];
        }
        $html_tag = $area_tag;
    } else {
        $html_tag = esc_attr($attributes['tagName']);
    }
    $wrapper_attributes = get_block_wrapper_attributes();
    return "<{$html_tag} {$wrapper_attributes}>" . str_replace(']]>', ']]&gt;', $content) . "</{$html_tag}>";
}

WordPress Version: 1.3

/**
 * Server-side rendering of the `core/template-part` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/template-part` block on the server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string The render.
 */
function render_block_core_template_part($attributes)
{
    static $seen_ids = array();
    $template_part_id = null;
    $content = null;
    $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
    if (isset($attributes['slug']) && isset($attributes['theme']) && wp_get_theme()->get_stylesheet() === $attributes['theme']) {
        $template_part_id = $attributes['theme'] . '//' . $attributes['slug'];
        $template_part_query = new WP_Query(array('post_type' => 'wp_template_part', 'post_status' => 'publish', 'post_name__in' => array($attributes['slug']), 'tax_query' => array(array('taxonomy' => 'wp_theme', 'field' => 'name', 'terms' => $attributes['theme'])), 'posts_per_page' => 1, 'no_found_rows' => true));
        $template_part_post = $template_part_query->have_posts() ? $template_part_query->next_post() : null;
        if ($template_part_post) {
            // A published post might already exist if this template part was customized elsewhere
            // or if it's part of a customized template.
            $content = $template_part_post->post_content;
            $area_terms = get_the_terms($template_part_post, 'wp_template_part_area');
            if (!is_wp_error($area_terms) && false !== $area_terms) {
                $area = $area_terms[0]->name;
            }
            /**
             * Fires when a block template part is loaded from a template post stored in the database.
             *
             * @since 5.9.0
             *
             * @param string  $template_part_id   The requested template part namespaced to the theme.
             * @param array   $attributes         The block attributes.
             * @param WP_Post $template_part_post The template part post object.
             * @param string  $content            The template part content.
             */
            do_action('render_block_core_template_part_post', $template_part_id, $attributes, $template_part_post, $content);
        } else {
            // Else, if the template part was provided by the active theme,
            // render the corresponding file content.
            $parent_theme_folders = get_block_theme_folders(get_template());
            $child_theme_folders = get_block_theme_folders(get_stylesheet());
            $child_theme_part_file_path = get_theme_file_path('/' . $child_theme_folders['wp_template_part'] . '/' . $attributes['slug'] . '.html');
            $parent_theme_part_file_path = get_theme_file_path('/' . $parent_theme_folders['wp_template_part'] . '/' . $attributes['slug'] . '.html');
            $template_part_file_path = (0 === validate_file($attributes['slug']) && file_exists($child_theme_part_file_path)) ? $child_theme_part_file_path : $parent_theme_part_file_path;
            if (0 === validate_file($attributes['slug']) && file_exists($template_part_file_path)) {
                $content = file_get_contents($template_part_file_path);
                $content = (is_string($content) && '' !== $content) ? _inject_theme_attribute_in_block_template_content($content) : '';
            }
            if ('' !== $content && null !== $content) {
                /**
                 * Fires when a block template part is loaded from a template part in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the template path.
                 * @param string $content                 The template part content.
                 */
                do_action('render_block_core_template_part_file', $template_part_id, $attributes, $template_part_file_path, $content);
            } else {
                /**
                 * Fires when a requested block template part does not exist in the database nor in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the not found template path.
                 */
                do_action('render_block_core_template_part_none', $template_part_id, $attributes, $template_part_file_path);
            }
        }
    }
    // WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent
    // is set in `wp_debug_mode()`.
    $is_debug = defined('WP_DEBUG') && WP_DEBUG && defined('WP_DEBUG_DISPLAY') && WP_DEBUG_DISPLAY;
    if (is_null($content) && $is_debug) {
        if (!isset($attributes['slug'])) {
            // If there is no slug this is a placeholder and we dont want to return any message.
            return;
        }
        return sprintf(
            /* translators: %s: Template part slug. */
            __('Template part has been deleted or is unavailable: %s'),
            $attributes['slug']
        );
    }
    if (isset($seen_ids[$template_part_id])) {
        return $is_debug ? __('[block rendering halted]') : '';
    }
    // Run through the actions that are typically taken on the_content.
    $content = shortcode_unautop($content);
    $content = do_shortcode($content);
    $seen_ids[$template_part_id] = true;
    $content = do_blocks($content);
    unset($seen_ids[$template_part_id]);
    $content = wptexturize($content);
    $content = convert_smilies($content);
    $content = wp_filter_content_tags($content);
    // Handle embeds for block template parts.
    global $wp_embed;
    $content = $wp_embed->autoembed($content);
    if (empty($attributes['tagName'])) {
        $defined_areas = get_allowed_block_template_part_areas();
        $area_tag = 'div';
        foreach ($defined_areas as $defined_area) {
            if ($defined_area['area'] === $area && isset($defined_area['area_tag'])) {
                $area_tag = $defined_area['area_tag'];
            }
        }
        $html_tag = $area_tag;
    } else {
        $html_tag = esc_attr($attributes['tagName']);
    }
    $wrapper_attributes = get_block_wrapper_attributes();
    return "<{$html_tag} {$wrapper_attributes}>" . str_replace(']]>', ']]&gt;', $content) . "</{$html_tag}>";
}

WordPress Version: 6.1

/**
 * Server-side rendering of the `core/template-part` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/template-part` block on the server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string The render.
 */
function render_block_core_template_part($attributes)
{
    static $seen_ids = array();
    $template_part_id = null;
    $content = null;
    $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
    if (isset($attributes['slug']) && isset($attributes['theme']) && wp_get_theme()->get_stylesheet() === $attributes['theme']) {
        $template_part_id = $attributes['theme'] . '//' . $attributes['slug'];
        $template_part_query = new WP_Query(array('post_type' => 'wp_template_part', 'post_status' => 'publish', 'post_name__in' => array($attributes['slug']), 'tax_query' => array(array('taxonomy' => 'wp_theme', 'field' => 'name', 'terms' => $attributes['theme'])), 'posts_per_page' => 1, 'no_found_rows' => true));
        $template_part_post = $template_part_query->have_posts() ? $template_part_query->next_post() : null;
        if ($template_part_post) {
            // A published post might already exist if this template part was customized elsewhere
            // or if it's part of a customized template.
            $content = $template_part_post->post_content;
            $area_terms = get_the_terms($template_part_post, 'wp_template_part_area');
            if (!is_wp_error($area_terms) && false !== $area_terms) {
                $area = $area_terms[0]->name;
            }
            /**
             * Fires when a block template part is loaded from a template post stored in the database.
             *
             * @since 5.9.0
             *
             * @param string  $template_part_id   The requested template part namespaced to the theme.
             * @param array   $attributes         The block attributes.
             * @param WP_Post $template_part_post The template part post object.
             * @param string  $content            The template part content.
             */
            do_action('render_block_core_template_part_post', $template_part_id, $attributes, $template_part_post, $content);
        } else {
            // Else, if the template part was provided by the active theme,
            // render the corresponding file content.
            $parent_theme_folders = get_block_theme_folders(get_template());
            $child_theme_folders = get_block_theme_folders(get_stylesheet());
            $child_theme_part_file_path = get_theme_file_path('/' . $child_theme_folders['wp_template_part'] . '/' . $attributes['slug'] . '.html');
            $parent_theme_part_file_path = get_theme_file_path('/' . $parent_theme_folders['wp_template_part'] . '/' . $attributes['slug'] . '.html');
            $template_part_file_path = (0 === validate_file($attributes['slug']) && file_exists($child_theme_part_file_path)) ? $child_theme_part_file_path : $parent_theme_part_file_path;
            if (0 === validate_file($attributes['slug']) && file_exists($template_part_file_path)) {
                $content = file_get_contents($template_part_file_path);
                $content = (is_string($content) && '' !== $content) ? _inject_theme_attribute_in_block_template_content($content) : '';
            }
            if ('' !== $content && null !== $content) {
                /**
                 * Fires when a block template part is loaded from a template part in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the template path.
                 * @param string $content                 The template part content.
                 */
                do_action('render_block_core_template_part_file', $template_part_id, $attributes, $template_part_file_path, $content);
            } else {
                /**
                 * Fires when a requested block template part does not exist in the database nor in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the not found template path.
                 */
                do_action('render_block_core_template_part_none', $template_part_id, $attributes, $template_part_file_path);
            }
        }
    }
    // WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent
    // is set in `wp_debug_mode()`.
    $is_debug = defined('WP_DEBUG') && WP_DEBUG && defined('WP_DEBUG_DISPLAY') && WP_DEBUG_DISPLAY;
    if (is_null($content) && $is_debug) {
        if (!isset($attributes['slug'])) {
            // If there is no slug this is a placeholder and we dont want to return any message.
            return;
        }
        return sprintf(
            /* translators: %s: Template part slug. */
            __('Template part has been deleted or is unavailable: %s'),
            $attributes['slug']
        );
    }
    if (isset($seen_ids[$template_part_id])) {
        return $is_debug ? __('[block rendering halted]') : '';
    }
    // Run through the actions that are typically taken on the_content.
    $seen_ids[$template_part_id] = true;
    $content = do_blocks($content);
    unset($seen_ids[$template_part_id]);
    $content = wptexturize($content);
    $content = convert_smilies($content);
    $content = shortcode_unautop($content);
    $content = wp_filter_content_tags($content);
    $content = do_shortcode($content);
    // Handle embeds for block template parts.
    global $wp_embed;
    $content = $wp_embed->autoembed($content);
    if (empty($attributes['tagName'])) {
        $defined_areas = get_allowed_block_template_part_areas();
        $area_tag = 'div';
        foreach ($defined_areas as $defined_area) {
            if ($defined_area['area'] === $area && isset($defined_area['area_tag'])) {
                $area_tag = $defined_area['area_tag'];
            }
        }
        $html_tag = $area_tag;
    } else {
        $html_tag = esc_attr($attributes['tagName']);
    }
    $wrapper_attributes = get_block_wrapper_attributes();
    return "<{$html_tag} {$wrapper_attributes}>" . str_replace(']]>', ']]&gt;', $content) . "</{$html_tag}>";
}

WordPress Version: 9.7

/**
 * Server-side rendering of the `core/template-part` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/template-part` block on the server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string The render.
 */
function render_block_core_template_part($attributes)
{
    static $seen_ids = array();
    $template_part_id = null;
    $content = null;
    $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
    if (isset($attributes['slug']) && isset($attributes['theme']) && wp_get_theme()->get_stylesheet() === $attributes['theme']) {
        $template_part_id = $attributes['theme'] . '//' . $attributes['slug'];
        $template_part_query = new WP_Query(array('post_type' => 'wp_template_part', 'post_status' => 'publish', 'post_name__in' => array($attributes['slug']), 'tax_query' => array(array('taxonomy' => 'wp_theme', 'field' => 'slug', 'terms' => $attributes['theme'])), 'posts_per_page' => 1, 'no_found_rows' => true));
        $template_part_post = $template_part_query->have_posts() ? $template_part_query->next_post() : null;
        if ($template_part_post) {
            // A published post might already exist if this template part was customized elsewhere
            // or if it's part of a customized template.
            $content = $template_part_post->post_content;
            $area_terms = get_the_terms($template_part_post, 'wp_template_part_area');
            if (!is_wp_error($area_terms) && false !== $area_terms) {
                $area = $area_terms[0]->name;
            }
            /**
             * Fires when a block template part is loaded from a template post stored in the database.
             *
             * @since 5.9.0
             *
             * @param string  $template_part_id   The requested template part namespaced to the theme.
             * @param array   $attributes         The block attributes.
             * @param WP_Post $template_part_post The template part post object.
             * @param string  $content            The template part content.
             */
            do_action('render_block_core_template_part_post', $template_part_id, $attributes, $template_part_post, $content);
        } else {
            // Else, if the template part was provided by the active theme,
            // render the corresponding file content.
            $parent_theme_folders = get_block_theme_folders(get_template());
            $child_theme_folders = get_block_theme_folders(get_stylesheet());
            $child_theme_part_file_path = get_theme_file_path('/' . $child_theme_folders['wp_template_part'] . '/' . $attributes['slug'] . '.html');
            $parent_theme_part_file_path = get_theme_file_path('/' . $parent_theme_folders['wp_template_part'] . '/' . $attributes['slug'] . '.html');
            $template_part_file_path = (0 === validate_file($attributes['slug']) && file_exists($child_theme_part_file_path)) ? $child_theme_part_file_path : $parent_theme_part_file_path;
            if (0 === validate_file($attributes['slug']) && file_exists($template_part_file_path)) {
                $content = file_get_contents($template_part_file_path);
                $content = (is_string($content) && '' !== $content) ? _inject_theme_attribute_in_block_template_content($content) : '';
            }
            if ('' !== $content && null !== $content) {
                /**
                 * Fires when a block template part is loaded from a template part in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the template path.
                 * @param string $content                 The template part content.
                 */
                do_action('render_block_core_template_part_file', $template_part_id, $attributes, $template_part_file_path, $content);
            } else {
                /**
                 * Fires when a requested block template part does not exist in the database nor in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the not found template path.
                 */
                do_action('render_block_core_template_part_none', $template_part_id, $attributes, $template_part_file_path);
            }
        }
    }
    if (is_null($content) && is_user_logged_in()) {
        if (!isset($attributes['slug'])) {
            // If there is no slug this is a placeholder and we dont want to return any message.
            return;
        }
        return sprintf(
            /* translators: %s: Template part slug. */
            __('Template part has been deleted or is unavailable: %s'),
            $attributes['slug']
        );
    }
    if (isset($seen_ids[$template_part_id])) {
        // WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent
        // is set in `wp_debug_mode()`.
        $is_debug = defined('WP_DEBUG') && WP_DEBUG && defined('WP_DEBUG_DISPLAY') && WP_DEBUG_DISPLAY;
        return $is_debug ? __('[block rendering halted]') : '';
    }
    // Run through the actions that are typically taken on the_content.
    $content = shortcode_unautop($content);
    $content = do_shortcode($content);
    $seen_ids[$template_part_id] = true;
    $content = do_blocks($content);
    unset($seen_ids[$template_part_id]);
    $content = wptexturize($content);
    $content = convert_smilies($content);
    $content = wp_filter_content_tags($content);
    // Handle embeds for block template parts.
    global $wp_embed;
    $content = $wp_embed->autoembed($content);
    if (empty($attributes['tagName'])) {
        $defined_areas = get_allowed_block_template_part_areas();
        $area_tag = 'div';
        foreach ($defined_areas as $defined_area) {
            if ($defined_area['area'] === $area && isset($defined_area['area_tag'])) {
                $area_tag = $defined_area['area_tag'];
            }
        }
        $html_tag = $area_tag;
    } else {
        $html_tag = esc_attr($attributes['tagName']);
    }
    $wrapper_attributes = get_block_wrapper_attributes();
    return "<{$html_tag} {$wrapper_attributes}>" . str_replace(']]>', ']]&gt;', $content) . "</{$html_tag}>";
}

WordPress Version: 5.9

/**
 * Server-side rendering of the `core/template-part` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/template-part` block on the server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string The render.
 */
function render_block_core_template_part($attributes)
{
    static $seen_ids = array();
    $template_part_id = null;
    $content = null;
    $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
    if (isset($attributes['slug']) && isset($attributes['theme']) && wp_get_theme()->get_stylesheet() === $attributes['theme']) {
        $template_part_id = $attributes['theme'] . '//' . $attributes['slug'];
        $template_part_query = new WP_Query(array('post_type' => 'wp_template_part', 'post_status' => 'publish', 'post_name__in' => array($attributes['slug']), 'tax_query' => array(array('taxonomy' => 'wp_theme', 'field' => 'slug', 'terms' => $attributes['theme'])), 'posts_per_page' => 1, 'no_found_rows' => true));
        $template_part_post = $template_part_query->have_posts() ? $template_part_query->next_post() : null;
        if ($template_part_post) {
            // A published post might already exist if this template part was customized elsewhere
            // or if it's part of a customized template.
            $content = $template_part_post->post_content;
            $area_terms = get_the_terms($template_part_post, 'wp_template_part_area');
            if (!is_wp_error($area_terms) && false !== $area_terms) {
                $area = $area_terms[0]->name;
            }
            /**
             * Fires when a block template part is loaded from a template post stored in the database.
             *
             * @since 5.9.0
             *
             * @param string  $template_part_id   The requested template part namespaced to the theme.
             * @param array   $attributes         The block attributes.
             * @param WP_Post $template_part_post The template part post object.
             * @param string  $content            The template part content.
             */
            do_action('render_block_core_template_part_post', $template_part_id, $attributes, $template_part_post, $content);
        } else {
            // Else, if the template part was provided by the active theme,
            // render the corresponding file content.
            $parent_theme_folders = get_block_theme_folders(get_template());
            $child_theme_folders = get_block_theme_folders(get_stylesheet());
            $child_theme_part_file_path = get_theme_file_path('/' . $child_theme_folders['wp_template_part'] . '/' . $attributes['slug'] . '.html');
            $parent_theme_part_file_path = get_theme_file_path('/' . $parent_theme_folders['wp_template_part'] . '/' . $attributes['slug'] . '.html');
            $template_part_file_path = (0 === validate_file($attributes['slug']) && file_exists($child_theme_part_file_path)) ? $child_theme_part_file_path : $parent_theme_part_file_path;
            if (0 === validate_file($attributes['slug']) && file_exists($template_part_file_path)) {
                $content = file_get_contents($template_part_file_path);
                $content = (is_string($content) && '' !== $content) ? _inject_theme_attribute_in_block_template_content($content) : '';
            }
            if ('' !== $content && null !== $content) {
                /**
                 * Fires when a block template part is loaded from a template part in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the template path.
                 * @param string $content                 The template part content.
                 */
                do_action('render_block_core_template_part_file', $template_part_id, $attributes, $template_part_file_path, $content);
            } else {
                /**
                 * Fires when a requested block template part does not exist in the database nor in the theme.
                 *
                 * @since 5.9.0
                 *
                 * @param string $template_part_id        The requested template part namespaced to the theme.
                 * @param array  $attributes              The block attributes.
                 * @param string $template_part_file_path Absolute path to the not found template path.
                 */
                do_action('render_block_core_template_part_none', $template_part_id, $attributes, $template_part_file_path);
            }
        }
    }
    if (is_null($content) && is_user_logged_in()) {
        if (!isset($attributes['slug'])) {
            // If there is no slug this is a placeholder and we dont want to return any message.
            return;
        }
        return sprintf(
            /* translators: %s: Template part slug. */
            __('Template part has been deleted or is unavailable: %s'),
            $attributes['slug']
        );
    }
    if (isset($seen_ids[$template_part_id])) {
        // WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent
        // is set in `wp_debug_mode()`.
        $is_debug = defined('WP_DEBUG') && WP_DEBUG && defined('WP_DEBUG_DISPLAY') && WP_DEBUG_DISPLAY;
        return $is_debug ? __('[block rendering halted]') : '';
    }
    // Run through the actions that are typically taken on the_content.
    $seen_ids[$template_part_id] = true;
    $content = do_blocks($content);
    unset($seen_ids[$template_part_id]);
    $content = wptexturize($content);
    $content = convert_smilies($content);
    $content = shortcode_unautop($content);
    $content = wp_filter_content_tags($content);
    $content = do_shortcode($content);
    // Handle embeds for block template parts.
    global $wp_embed;
    $content = $wp_embed->autoembed($content);
    if (empty($attributes['tagName'])) {
        $defined_areas = get_allowed_block_template_part_areas();
        $area_tag = 'div';
        foreach ($defined_areas as $defined_area) {
            if ($defined_area['area'] === $area && isset($defined_area['area_tag'])) {
                $area_tag = $defined_area['area_tag'];
            }
        }
        $html_tag = $area_tag;
    } else {
        $html_tag = esc_attr($attributes['tagName']);
    }
    $wrapper_attributes = get_block_wrapper_attributes();
    return "<{$html_tag} {$wrapper_attributes}>" . str_replace(']]>', ']]&gt;', $content) . "</{$html_tag}>";
}