--- 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'] ) ? '<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 ) {
+ $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 = '<p class="wp-block-post-excerpt__excerpt">' . $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
+ );
+}