[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