render_block_core_post_excerpt

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

WordPress Version: 6.3

/**
 * Server-side rendering of the `core/post-excerpt` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/post-excerpt` 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 excerpt for the current post wrapped inside "p" tags.
 */
function render_block_core_post_excerpt($attributes, $content, $block)
{
    if (!isset($block->context['postId'])) {
        return '';
    }
    /*
     * The purpose of the excerpt length setting is to limit the length of both
     * automatically generated and user-created excerpts.
     * Because the excerpt_length filter only applies to auto generated excerpts,
     * wp_trim_words is used instead.
     */
    $excerpt_length = $attributes['excerptLength'];
    $excerpt = get_the_excerpt($block->context['postId']);
    if (isset($excerpt_length)) {
        $excerpt = wp_trim_words($excerpt, $excerpt_length);
    }
    $more_text = (!empty($attributes['moreText'])) ? '<a class="wp-block-post-excerpt__more-link" href="' . esc_url(get_the_permalink($block->context['postId'])) . '">' . wp_kses_post($attributes['moreText']) . '</a>' : '';
    $filter_excerpt_more = static function ($more) use ($more_text) {
        return empty($more_text) ? $more : '';
    };
    /**
     * Some themes might use `excerpt_more` filter to handle the
     * `more` link displayed after a trimmed excerpt. Since the
     * block has a `more text` attribute we have to check and
     * override if needed the return value from this filter.
     * So if the block's attribute is not empty override the
     * `excerpt_more` filter and return nothing. This will
     * result in showing only one `read more` link at a time.
     */
    add_filter('excerpt_more', $filter_excerpt_more);
    $classes = array();
    if (isset($attributes['textAlign'])) {
        $classes[] = 'has-text-align-' . $attributes['textAlign'];
    }
    if (isset($attributes['style']['elements']['link']['color']['text'])) {
        $classes[] = 'has-link-color';
    }
    $wrapper_attributes = get_block_wrapper_attributes(array('class' => implode(' ', $classes)));
    $content = '<p class="wp-block-post-excerpt__excerpt">' . $excerpt;
    $show_more_on_new_line = !isset($attributes['showMoreOnNewLine']) || $attributes['showMoreOnNewLine'];
    if ($show_more_on_new_line && !empty($more_text)) {
        $content .= '</p><p class="wp-block-post-excerpt__more-text">' . $more_text . '</p>';
    } else {
        $content .= " {$more_text}</p>";
    }
    remove_filter('excerpt_more', $filter_excerpt_more);
    return sprintf('<div %1$s>%2$s</div>', $wrapper_attributes, $content);
}

WordPress Version: 6.2

/**
 * Server-side rendering of the `core/post-excerpt` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/post-excerpt` 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 excerpt for the current post wrapped inside "p" tags.
 */
function render_block_core_post_excerpt($attributes, $content, $block)
{
    if (!isset($block->context['postId'])) {
        return '';
    }
    $excerpt = get_the_excerpt();
    if (empty($excerpt)) {
        return '';
    }
    $more_text = (!empty($attributes['moreText'])) ? '<a class="wp-block-post-excerpt__more-link" href="' . esc_url(get_the_permalink($block->context['postId'])) . '">' . wp_kses_post($attributes['moreText']) . '</a>' : '';
    $filter_excerpt_more = function ($more) use ($more_text) {
        return empty($more_text) ? $more : '';
    };
    /**
     * Some themes might use `excerpt_more` filter to handle the
     * `more` link displayed after a trimmed excerpt. Since the
     * block has a `more text` attribute we have to check and
     * override if needed the return value from this filter.
     * So if the block's attribute is not empty override the
     * `excerpt_more` filter and return nothing. This will
     * result in showing only one `read more` link at a time.
     */
    add_filter('excerpt_more', $filter_excerpt_more);
    $classes = array();
    if (isset($attributes['textAlign'])) {
        $classes[] = 'has-text-align-' . $attributes['textAlign'];
    }
    if (isset($attributes['style']['elements']['link']['color']['text'])) {
        $classes[] = 'has-link-color';
    }
    $wrapper_attributes = get_block_wrapper_attributes(array('class' => implode(' ', $classes)));
    $content = '<p class="wp-block-post-excerpt__excerpt">' . $excerpt;
    $show_more_on_new_line = !isset($attributes['showMoreOnNewLine']) || $attributes['showMoreOnNewLine'];
    if ($show_more_on_new_line && !empty($more_text)) {
        $content .= '</p><p class="wp-block-post-excerpt__more-text">' . $more_text . '</p>';
    } else {
        $content .= " {$more_text}</p>";
    }
    remove_filter('excerpt_more', $filter_excerpt_more);
    return sprintf('<div %1$s>%2$s</div>', $wrapper_attributes, $content);
}

WordPress Version: 6.1

/**
 * Server-side rendering of the `core/post-excerpt` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/post-excerpt` 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 excerpt for the current post wrapped inside "p" tags.
 */
function render_block_core_post_excerpt($attributes, $content, $block)
{
    if (!isset($block->context['postId'])) {
        return '';
    }
    $excerpt = get_the_excerpt();
    if (empty($excerpt)) {
        return '';
    }
    $more_text = (!empty($attributes['moreText'])) ? '<a class="wp-block-post-excerpt__more-link" href="' . esc_url(get_the_permalink($block->context['postId'])) . '">' . wp_kses_post($attributes['moreText']) . '</a>' : '';
    $filter_excerpt_more = function ($more) use ($more_text) {
        return empty($more_text) ? $more : '';
    };
    /**
     * Some themes might use `excerpt_more` filter to handle the
     * `more` link displayed after a trimmed excerpt. Since the
     * block has a `more text` attribute we have to check and
     * override if needed the return value from this filter.
     * So if the block's attribute is not empty override the
     * `excerpt_more` filter and return nothing. This will
     * result in showing only one `read more` link at a time.
     */
    add_filter('excerpt_more', $filter_excerpt_more);
    $classes = '';
    if (isset($attributes['textAlign'])) {
        $classes .= "has-text-align-{$attributes['textAlign']}";
    }
    $wrapper_attributes = get_block_wrapper_attributes(array('class' => $classes));
    $content = '<p class="wp-block-post-excerpt__excerpt">' . $excerpt;
    $show_more_on_new_line = !isset($attributes['showMoreOnNewLine']) || $attributes['showMoreOnNewLine'];
    if ($show_more_on_new_line && !empty($more_text)) {
        $content .= '</p><p class="wp-block-post-excerpt__more-text">' . $more_text . '</p>';
    } else {
        $content .= " {$more_text}</p>";
    }
    remove_filter('excerpt_more', $filter_excerpt_more);
    return sprintf('<div %1$s>%2$s</div>', $wrapper_attributes, $content);
}

WordPress Version: 5.9

/**
 * Server-side rendering of the `core/post-excerpt` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/post-excerpt` 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 excerpt for the current post wrapped inside "p" tags.
 */
function render_block_core_post_excerpt($attributes, $content, $block)
{
    if (!isset($block->context['postId'])) {
        return '';
    }
    $excerpt = get_the_excerpt();
    if (empty($excerpt)) {
        return '';
    }
    $more_text = (!empty($attributes['moreText'])) ? '<a class="wp-block-post-excerpt__more-link" href="' . esc_url(get_the_permalink($block->context['postId'])) . '">' . $attributes['moreText'] . '</a>' : '';
    $filter_excerpt_more = function ($more) use ($more_text) {
        return empty($more_text) ? $more : '';
    };
    /**
     * Some themes might use `excerpt_more` filter to handle the
     * `more` link displayed after a trimmed excerpt. Since the
     * block has a `more text` attribute we have to check and
     * override if needed the return value from this filter.
     * So if the block's attribute is not empty override the
     * `excerpt_more` filter and return nothing. This will
     * result in showing only one `read more` link at a time.
     */
    add_filter('excerpt_more', $filter_excerpt_more);
    $classes = '';
    if (isset($attributes['textAlign'])) {
        $classes .= "has-text-align-{$attributes['textAlign']}";
    }
    $wrapper_attributes = get_block_wrapper_attributes(array('class' => $classes));
    $content = '<p class="wp-block-post-excerpt__excerpt">' . $excerpt;
    $show_more_on_new_line = !isset($attributes['showMoreOnNewLine']) || $attributes['showMoreOnNewLine'];
    if ($show_more_on_new_line && !empty($more_text)) {
        $content .= '</p><p class="wp-block-post-excerpt__more-text">' . $more_text . '</p>';
    } else {
        $content .= " {$more_text}</p>";
    }
    remove_filter('excerpt_more', $filter_excerpt_more);
    return sprintf('<div %1$s>%2$s</div>', $wrapper_attributes, $content);
}

WordPress Version: 5.8

/**
 * Server-side rendering of the `core/post-excerpt` block.
 *
 * @package WordPress
 */
/**
 * Renders the `core/post-excerpt` 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 excerpt for the current post wrapped inside "p" tags.
 */
function render_block_core_post_excerpt($attributes, $content, $block)
{
    if (!isset($block->context['postId'])) {
        return '';
    }
    $more_text = (!empty($attributes['moreText'])) ? '<a class="wp-block-post-excerpt__more-link" href="' . esc_url(get_the_permalink($block->context['postId'])) . '">' . $attributes['moreText'] . '</a>' : '';
    $filter_excerpt_more = function ($more) use ($more_text) {
        return empty($more_text) ? $more : '';
    };
    /**
     * Some themes might use `excerpt_more` filter to handle the
     * `more` link displayed after a trimmed excerpt. Since the
     * block has a `more text` attribute we have to check and
     * override if needed the return value from this filter.
     * So if the block's attribute is not empty override the
     * `excerpt_more` filter and return nothing. This will
     * result in showing only one `read more` link at a time.
     */
    add_filter('excerpt_more', $filter_excerpt_more);
    $classes = '';
    if (isset($attributes['textAlign'])) {
        $classes .= "has-text-align-{$attributes['textAlign']}";
    }
    $wrapper_attributes = get_block_wrapper_attributes(array('class' => $classes));
    $content = '<p class="wp-block-post-excerpt__excerpt">' . get_the_excerpt($block->context['postId']);
    $show_more_on_new_line = !isset($attributes['showMoreOnNewLine']) || $attributes['showMoreOnNewLine'];
    if ($show_more_on_new_line && !empty($more_text)) {
        $content .= '</p><p class="wp-block-post-excerpt__more-text">' . $more_text . '</p>';
    } else {
        $content .= " {$more_text}</p>";
    }
    remove_filter('excerpt_more', $filter_excerpt_more);
    return sprintf('<div %1$s>%2$s</div>', $wrapper_attributes, $content);
}