[wp-trac] [WordPress Trac] #44741: get_the_excerpt and wp_trim_excerpt ambiguity

WordPress Trac noreply at wordpress.org
Mon Aug 6 13:02:24 UTC 2018


#44741: get_the_excerpt and wp_trim_excerpt ambiguity
-------------------------------+-----------------------------
 Reporter:  tofandel           |      Owner:  (none)
     Type:  defect (bug)       |     Status:  new
 Priority:  normal             |  Milestone:  Awaiting Review
Component:  Posts, Post Types  |    Version:  4.9.8
 Severity:  minor              |   Keywords:  has-patch
  Focuses:                     |
-------------------------------+-----------------------------
 Hello, I found a little ambiguity with the get_the_excerpt function when a
 $post is provided as a parameter to the function, the text from a wrong
 post can be taken.

 The issue comes from the fact that get_the_excerpt applies the
 wp_trim_excerpt filter.
 But, this filter only accounts for one parameter which is the text when it
 should take a second one that is the $post parameter passed to it.

 Actuallly it gets the default content with
 {{{
 get_the_content('');
 }}}
 when it should take the content from the $post parameter passed to the
 filter with $post->post_content

 So the new function should be in wp-includes/formatting.php
 {{{#!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 );
 }}}

 The $post parameter is already passed as a parameter to the
 'get_the_excerpt' filter so nothing to do there.

 Thanks

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/44741>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list