render_block_core_post_content

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

WordPress Version: 6.4

/**
 * Server-side rendering of the `core/post-content` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/post-content` block on the server.
 *
 * @param array    $attributes Block attributes.
 * @param string   $content    Block default content.
 * @param WP_Block $block      Block instance.
 * @return string Returns the filtered post content of the current post.
 */
function render_block_core_post_content($attributes, $content, $block)
{
    static $seen_ids = array();
    if (!isset($block->context['postId'])) {
        return '';
    }
    $post_id = $block->context['postId'];
    if (isset($seen_ids[$post_id])) {
        // 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]') : '';
    }
    $seen_ids[$post_id] = true;
    // When inside the main loop, we want to use queried object
    // so that `the_preview` for the current post can apply.
    // We force this behavior by omitting the third argument (post ID) from the `get_the_content`.
    $content = get_the_content();
    // Check for nextpage to display page links for paginated posts.
    if (has_block('core/nextpage')) {
        $content .= wp_link_pages(array('echo' => 0));
    }
    /** This filter is documented in wp-includes/post-template.php */
    $content = apply_filters('the_content', str_replace(']]>', ']]>', $content));
    unset($seen_ids[$post_id]);
    if (empty($content)) {
        return '';
    }
    $wrapper_attributes = get_block_wrapper_attributes(array('class' => 'entry-content'));
    return '<div ' . $wrapper_attributes . '>' . $content . '</div>';
}

WordPress Version: 6.2

/**
 * Server-side rendering of the `core/post-content` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/post-content` block on the server.
 *
 * @param array    $attributes Block attributes.
 * @param string   $content    Block default content.
 * @param WP_Block $block      Block instance.
 * @return string Returns the filtered post content of the current post.
 */
function render_block_core_post_content($attributes, $content, $block)
{
    static $seen_ids = array();
    if (!isset($block->context['postId'])) {
        return '';
    }
    $post_id = $block->context['postId'];
    if (isset($seen_ids[$post_id])) {
        // 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]') : '';
    }
    $seen_ids[$post_id] = true;
    // Check is needed for backward compatibility with third-party plugins
    // that might rely on the `in_the_loop` check; calling `the_post` sets it to true.
    if (!in_the_loop() && have_posts()) {
        the_post();
    }
    // When inside the main loop, we want to use queried object
    // so that `the_preview` for the current post can apply.
    // We force this behavior by omitting the third argument (post ID) from the `get_the_content`.
    $content = get_the_content();
    // Check for nextpage to display page links for paginated posts.
    if (has_block('core/nextpage')) {
        $content .= wp_link_pages(array('echo' => 0));
    }
    /** This filter is documented in wp-includes/post-template.php */
    $content = apply_filters('the_content', str_replace(']]>', ']]&gt;', $content));
    unset($seen_ids[$post_id]);
    if (empty($content)) {
        return '';
    }
    $wrapper_attributes = get_block_wrapper_attributes(array('class' => 'entry-content'));
    return '<div ' . $wrapper_attributes . '>' . $content . '</div>';
}

WordPress Version: 6.1

/**
 * Server-side rendering of the `core/post-content` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/post-content` block on the server.
 *
 * @param array    $attributes Block attributes.
 * @param string   $content    Block default content.
 * @param WP_Block $block      Block instance.
 * @return string Returns the filtered post content of the current post.
 */
function render_block_core_post_content($attributes, $content, $block)
{
    static $seen_ids = array();
    if (!isset($block->context['postId'])) {
        return '';
    }
    $post_id = $block->context['postId'];
    if (isset($seen_ids[$post_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]') : '';
    }
    $seen_ids[$post_id] = true;
    // Check is needed for backward compatibility with third-party plugins
    // that might rely on the `in_the_loop` check; calling `the_post` sets it to true.
    if (!in_the_loop() && have_posts()) {
        the_post();
    }
    // When inside the main loop, we want to use queried object
    // so that `the_preview` for the current post can apply.
    // We force this behavior by omitting the third argument (post ID) from the `get_the_content`.
    $content = get_the_content();
    // Check for nextpage to display page links for paginated posts.
    if (has_block('core/nextpage')) {
        $content .= wp_link_pages(array('echo' => 0));
    }
    /** This filter is documented in wp-includes/post-template.php */
    $content = apply_filters('the_content', str_replace(']]>', ']]&gt;', $content));
    unset($seen_ids[$post_id]);
    if (empty($content)) {
        return '';
    }
    $wrapper_attributes = get_block_wrapper_attributes(array('class' => 'entry-content'));
    return '<div ' . $wrapper_attributes . '>' . $content . '</div>';
}

WordPress Version: 5.9

/**
 * Server-side rendering of the `core/post-content` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/post-content` block on the server.
 *
 * @param array    $attributes Block attributes.
 * @param string   $content    Block default content.
 * @param WP_Block $block      Block instance.
 * @return string Returns the filtered post content of the current post.
 */
function render_block_core_post_content($attributes, $content, $block)
{
    static $seen_ids = array();
    if (!isset($block->context['postId'])) {
        return '';
    }
    $post_id = $block->context['postId'];
    if (isset($seen_ids[$post_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]') : '';
    }
    $seen_ids[$post_id] = true;
    // Check is needed for backward compatibility with third-party plugins
    // that might rely on the `in_the_loop` check; calling `the_post` sets it to true.
    if (!in_the_loop() && have_posts()) {
        the_post();
    }
    // When inside the main loop, we want to use queried object
    // so that `the_preview` for the current post can apply.
    // We force this behavior by omitting the third argument (post ID) from the `get_the_content`.
    $content = get_the_content(null, false);
    // Check for nextpage to display page links for paginated posts.
    if (has_block('core/nextpage')) {
        $content .= wp_link_pages(array('echo' => 0));
    }
    /** This filter is documented in wp-includes/post-template.php */
    $content = apply_filters('the_content', str_replace(']]>', ']]&gt;', $content));
    unset($seen_ids[$post_id]);
    if (empty($content)) {
        return '';
    }
    $wrapper_attributes = get_block_wrapper_attributes(array('class' => 'entry-content'));
    return '<div ' . $wrapper_attributes . '>' . $content . '</div>';
}

WordPress Version: 5.8

/**
 * Server-side rendering of the `core/post-content` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/post-content` block on the server.
 *
 * @param array    $attributes Block attributes.
 * @param string   $content    Block default content.
 * @param WP_Block $block      Block instance.
 * @return string Returns the filtered post content of the current post.
 */
function render_block_core_post_content($attributes, $content, $block)
{
    static $seen_ids = array();
    if (!isset($block->context['postId'])) {
        return '';
    }
    $post_id = $block->context['postId'];
    if (isset($seen_ids[$post_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]') : '';
    }
    $seen_ids[$post_id] = true;
    if (!in_the_loop() && have_posts()) {
        the_post();
    }
    $content = get_the_content(null, false, $post_id);
    /** This filter is documented in wp-includes/post-template.php */
    $content = apply_filters('the_content', str_replace(']]>', ']]&gt;', $content));
    unset($seen_ids[$post_id]);
    if (empty($content)) {
        return '';
    }
    $wrapper_attributes = get_block_wrapper_attributes(array('class' => 'entry-content'));
    return '<div ' . $wrapper_attributes . '>' . $content . '</div>';
}