[wp-trac] [WordPress Trac] #36934: Use of get_the_excerpt($post) is broken if post has no excerpt and you are inside a loop
WordPress Trac
noreply at wordpress.org
Mon Aug 6 14:05:10 UTC 2018
#36934: Use of get_the_excerpt($post) is broken if post has no excerpt and you are
inside a loop
-------------------------------------------------+-------------------------
Reporter: magicroundabout | Owner: swissspidy
Type: defect (bug) | Status: reviewing
Priority: normal | Milestone: Future
| Release
Component: Formatting | Version: 4.5
Severity: normal | Resolution:
Keywords: has-patch needs-testing has-unit- | Focuses: template
tests dev-feedback |
-------------------------------------------------+-------------------------
Comment (by tofandel):
I would like to see this fixed as well, it's really an easy patch (Sorry
for the duplicate I didn't find this thread)
So the new function should be in wp-includes/formatting.php
{{{
<?php
/**
* Generates an excerpt from the content, if needed.
*
* The excerpt word amount will be 55 words and if the amount is greater
than
* that, then the string ' […]' will be appended to the excerpt. If
the string
* is less than 55 words, then the content will be returned as is.
*
* The 55 word limit can be modified by plugins/themes using the {@see
'excerpt_length'} filter
* The ' […]' string can be modified by plugins/themes using the
{@see 'excerpt_more'} filter
*
* @since 1.5.0
*
* @param string $text Optional. The excerpt. If set to empty, an excerpt
is generated.
* @param WP_Post|int|null $post
* @return string The excerpt.
*/
function wp_trim_excerpt( $text = '', $post = null ) {
$raw_excerpt = $text;
if ( '' == $text ) {
$post = get_post( $post );
if ( empty( $post ) ) {
$text = '';
} else {
$text = $post->post_content;
}
$text = strip_shortcodes( $text );
/** This filter is documented in wp-includes/post-
template.php */
$text = apply_filters( 'the_content', $text );
$text = str_replace(']]>', ']]>', $text);
/**
* Filters the number of words in an excerpt.
*
* @since 2.7.0
*
* @param int $number The number of words. Default 55.
*/
$excerpt_length = apply_filters( 'excerpt_length', 55 );
/**
* Filters the string in the "more" link displayed after a
trimmed excerpt.
*
* @since 2.9.0
*
* @param string $more_string The string shown within the
more link.
*/
$excerpt_more = apply_filters( 'excerpt_more', ' ' .
'[…]' );
$text = wp_trim_words( $text, $excerpt_length,
$excerpt_more );
}
/**
* Filters the trimmed excerpt string.
*
* @since 2.8.0
*
* @param string $text The trimmed text.
* @param string $raw_excerpt The text prior to trimming.
*/
return apply_filters( 'wp_trim_excerpt', $text, $raw_excerpt );
}
}}}
And in wp-includes/default-filters.php the new filter should be:
{{{
add_filter( 'get_the_excerpt', 'wp_trim_excerpt', 10, 2 );
}}}
--
Ticket URL: <https://core.trac.wordpress.org/ticket/36934#comment:52>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list