diff -r 7b1b88e27a20 -r 48c4eec2b7e6 wp/wp-includes/blocks/post-excerpt.php --- a/wp/wp-includes/blocks/post-excerpt.php Thu Sep 29 08:06:27 2022 +0200 +++ b/wp/wp-includes/blocks/post-excerpt.php Fri Sep 05 18:40:08 2025 +0200 @@ -8,6 +8,8 @@ /** * Renders the `core/post-excerpt` block on the server. * + * @since 5.8.0 + * * @param array $attributes Block attributes. * @param string $content Block default content. * @param WP_Block $block Block instance. @@ -18,14 +20,20 @@ return ''; } - $excerpt = get_the_excerpt(); - - if ( empty( $excerpt ) ) { - 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'] ) ? '' . wp_kses_post( $attributes['moreText'] ) . '' : ''; - $filter_excerpt_more = function( $more ) use ( $more_text ) { + $filter_excerpt_more = static function ( $more ) use ( $more_text ) { return empty( $more_text ) ? $more : ''; }; /** @@ -38,11 +46,14 @@ * result in showing only one `read more` link at a time. */ add_filter( 'excerpt_more', $filter_excerpt_more ); - $classes = ''; + $classes = array(); if ( isset( $attributes['textAlign'] ) ) { - $classes .= "has-text-align-{$attributes['textAlign']}"; + $classes[] = 'has-text-align-' . $attributes['textAlign']; } - $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $classes ) ); + if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) { + $classes[] = 'has-link-color'; + } + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) ); $content = '

' . $excerpt; $show_more_on_new_line = ! isset( $attributes['showMoreOnNewLine'] ) || $attributes['showMoreOnNewLine']; @@ -57,6 +68,8 @@ /** * Registers the `core/post-excerpt` block on the server. + * + * @since 5.8.0 */ function register_block_core_post_excerpt() { register_block_type_from_metadata( @@ -67,3 +80,20 @@ ); } add_action( 'init', 'register_block_core_post_excerpt' ); + +/** + * If themes or plugins filter the excerpt_length, we need to + * override the filter in the editor, otherwise + * the excerpt length block setting has no effect. + * Returns 100 because 100 is the max length in the setting. + */ +if ( is_admin() || + defined( 'REST_REQUEST' ) && REST_REQUEST ) { + add_filter( + 'excerpt_length', + static function () { + return 100; + }, + PHP_INT_MAX + ); +}