render_block_core_block

The timeline below displays how wordpress function render_block_core_block 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/block` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/block` block on server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string Rendered HTML of the referenced block.
 */
function render_block_core_block($attributes)
{
    static $seen_refs = array();
    if (empty($attributes['ref'])) {
        return '';
    }
    $reusable_block = get_post($attributes['ref']);
    if (!$reusable_block || 'wp_block' !== $reusable_block->post_type) {
        return '';
    }
    if (isset($seen_refs[$attributes['ref']])) {
        // 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;
        return $is_debug ? __('[block rendering halted]') : '';
    }
    if ('publish' !== $reusable_block->post_status || !empty($reusable_block->post_password)) {
        return '';
    }
    $seen_refs[$attributes['ref']] = true;
    // Handle embeds for reusable blocks.
    global $wp_embed;
    $content = $wp_embed->run_shortcode($reusable_block->post_content);
    $content = $wp_embed->autoembed($content);
    // Back compat.
    // For blocks that have not been migrated in the editor, add some back compat
    // so that front-end rendering continues to work.
    // This matches the `v2` deprecation. Removes the inner `values` property
    // from every item.
    if (isset($attributes['content'])) {
        foreach ($attributes['content'] as &$content_data) {
            if (isset($content_data['values'])) {
                $is_assoc_array = is_array($content_data['values']) && !wp_is_numeric_array($content_data['values']);
                if ($is_assoc_array) {
                    $content_data = $content_data['values'];
                }
            }
        }
    }
    // This matches the `v1` deprecation. Rename `overrides` to `content`.
    if (isset($attributes['overrides']) && !isset($attributes['content'])) {
        $attributes['content'] = $attributes['overrides'];
    }
    /**
     * We set the `pattern/overrides` context through the `render_block_context`
     * filter so that it is available when a pattern's inner blocks are
     * rendering via do_blocks given it only receives the inner content.
     */
    $has_pattern_overrides = isset($attributes['content']);
    if ($has_pattern_overrides) {
        $filter_block_context = static function ($context) use ($attributes) {
            $context['pattern/overrides'] = $attributes['content'];
            return $context;
        };
        add_filter('render_block_context', $filter_block_context, 1);
    }
    $content = do_blocks($content);
    unset($seen_refs[$attributes['ref']]);
    if ($has_pattern_overrides) {
        remove_filter('render_block_context', $filter_block_context, 1);
    }
    return $content;
}

WordPress Version: 6.2

/**
 * Server-side rendering of the `core/block` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/block` block on server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string Rendered HTML of the referenced block.
 */
function render_block_core_block($attributes)
{
    static $seen_refs = array();
    if (empty($attributes['ref'])) {
        return '';
    }
    $reusable_block = get_post($attributes['ref']);
    if (!$reusable_block || 'wp_block' !== $reusable_block->post_type) {
        return '';
    }
    if (isset($seen_refs[$attributes['ref']])) {
        // 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;
        return $is_debug ? __('[block rendering halted]') : '';
    }
    if ('publish' !== $reusable_block->post_status || !empty($reusable_block->post_password)) {
        return '';
    }
    $seen_refs[$attributes['ref']] = true;
    // Handle embeds for reusable blocks.
    global $wp_embed;
    $content = $wp_embed->run_shortcode($reusable_block->post_content);
    $content = $wp_embed->autoembed($content);
    $content = do_blocks($content);
    unset($seen_refs[$attributes['ref']]);
    return $content;
}

WordPress Version: 6.1

/**
 * Server-side rendering of the `core/block` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/block` block on server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string Rendered HTML of the referenced block.
 */
function render_block_core_block($attributes)
{
    static $seen_refs = array();
    if (empty($attributes['ref'])) {
        return '';
    }
    $reusable_block = get_post($attributes['ref']);
    if (!$reusable_block || 'wp_block' !== $reusable_block->post_type) {
        return '';
    }
    if (isset($seen_refs[$attributes['ref']])) {
        // 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]') : '';
    }
    if ('publish' !== $reusable_block->post_status || !empty($reusable_block->post_password)) {
        return '';
    }
    $seen_refs[$attributes['ref']] = true;
    // Handle embeds for reusable blocks.
    global $wp_embed;
    $content = $wp_embed->run_shortcode($reusable_block->post_content);
    $content = $wp_embed->autoembed($content);
    $content = do_blocks($content);
    unset($seen_refs[$attributes['ref']]);
    return $content;
}

WordPress Version: 5.8

/**
 * Server-side rendering of the `core/block` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/block` block on server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string Rendered HTML of the referenced block.
 */
function render_block_core_block($attributes)
{
    static $seen_refs = array();
    if (empty($attributes['ref'])) {
        return '';
    }
    $reusable_block = get_post($attributes['ref']);
    if (!$reusable_block || 'wp_block' !== $reusable_block->post_type) {
        return '';
    }
    if (isset($seen_refs[$attributes['ref']])) {
        // 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]') : '';
    }
    if ('publish' !== $reusable_block->post_status || !empty($reusable_block->post_password)) {
        return '';
    }
    $seen_refs[$attributes['ref']] = true;
    $result = do_blocks($reusable_block->post_content);
    unset($seen_refs[$attributes['ref']]);
    return $result;
}

WordPress Version: 5.7

/**
 * Server-side rendering of the `core/block` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/block` block on server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string Rendered HTML of the referenced block.
 */
function render_block_core_block($attributes)
{
    static $seen_refs = array();
    if (empty($attributes['ref'])) {
        return '';
    }
    $reusable_block = get_post($attributes['ref']);
    if (!$reusable_block || 'wp_block' !== $reusable_block->post_type) {
        return '';
    }
    if (isset($seen_refs[$attributes['ref']])) {
        if (!is_admin()) {
            trigger_error(sprintf(
                // translators: %s is the user-provided title of the reusable block.
                __('Could not render Reusable Block <strong>%s</strong>: blocks cannot be rendered inside themselves.'),
                $reusable_block->post_title
            ), E_USER_WARNING);
        }
        // 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]') : '';
    }
    if ('publish' !== $reusable_block->post_status || !empty($reusable_block->post_password)) {
        return '';
    }
    $seen_refs[$attributes['ref']] = true;
    $result = do_blocks($reusable_block->post_content);
    unset($seen_refs[$attributes['ref']]);
    return $result;
}

WordPress Version: .10

/**
 * Server-side rendering of the `core/block` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/block` block on server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string Rendered HTML of the referenced block.
 */
function render_block_core_block($attributes)
{
    if (empty($attributes['ref'])) {
        return '';
    }
    $reusable_block = get_post($attributes['ref']);
    if (!$reusable_block || 'wp_block' !== $reusable_block->post_type) {
        return '';
    }
    if ('publish' !== $reusable_block->post_status || !empty($reusable_block->post_password)) {
        return '';
    }
    return do_blocks($reusable_block->post_content);
}

WordPress Version: 5.0

/**
 * Server-side rendering of the `core/block` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/block` block on server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string Rendered HTML of the referenced block.
 */
function render_block_core_block($attributes)
{
    if (empty($attributes['ref'])) {
        return '';
    }
    $reusable_block = get_post($attributes['ref']);
    if (!$reusable_block || 'wp_block' !== $reusable_block->post_type) {
        return '';
    }
    return do_blocks($reusable_block->post_content);
}