WordPress.org

Make WordPress Core

Ticket #24330: 24330.5.diff

File 24330.5.diff, 11.3 KB (added by ryan, 5 years ago)

Pass post ID to the_remaining_content()

  • wp-includes/default-filters.php

     
    136136add_filter( 'the_title', 'trim'          );
    137137add_filter( 'the_title', '_post_formats_title', 10, 2 );
    138138
    139 add_filter( 'the_content', 'post_formats_compat', 7 );
     139add_filter( 'the_content', 'post_formats_compat', 7, 2 );
    140140add_filter( 'the_content', 'wptexturize'            );
    141141add_filter( 'the_content', 'convert_smilies'        );
    142142add_filter( 'the_content', 'convert_chars'          );
  • wp-includes/post-template.php

     
    160160 *
    161161 * @param string $more_link_text Optional. Content for when there is more text.
    162162 * @param bool $strip_teaser Optional. Strip teaser content before the more text. Default is false.
     163 * @param int $id Optional. A post id. Defaults to the current post when in The Loop, undefined otherwise.
    163164 */
    164 function the_content( $more_link_text = null, $strip_teaser = false ) {
    165         $content = apply_filters( 'the_content', get_the_content( $more_link_text, $strip_teaser ) );
     165function the_content( $more_link_text = null, $strip_teaser = false, $id = 0 ) {
     166        $post = get_post( $id );
     167
     168        /*
     169         * Filter: the_content
     170         *
     171         * param string Post content as returned by get_the_content()
     172         * param int The ID of the post to which the content belongs. This was introduced
     173         *           in 3.6.0 and is not reliably passed by all plugins and themes that
     174         *           directly apply the_content. As such, it is not considered portable.
     175         */
     176        $content = apply_filters( 'the_content', get_the_content( $more_link_text, $strip_teaser, $post->ID ), $post->ID );
    166177        echo str_replace( ']]>', ']]>', $content );
    167178}
    168179
     
    173184 *
    174185 * @param string $more_link_text Optional. Content for when there is more text.
    175186 * @param bool $stripteaser Optional. Strip teaser content before the more text. Default is false.
     187 * @param int $id Optional. A post id. Defaults to the current post when in The Loop, undefined otherwise.
    176188 * @return string
    177189 */
    178 function get_the_content( $more_link_text = null, $strip_teaser = false ) {
    179         global $more, $page, $pages, $multipage, $preview;
     190function get_the_content( $more_link_text = null, $strip_teaser = false, $id = 0 ) {
     191        global $page, $more, $preview;
    180192
    181         $post = get_post();
     193        $post = get_post( $id );
     194        // Avoid parsing again if the post is the same one parsed by setup_postdata().
     195        // The extract() will set up $pages and $multipage.
     196        if ( $post->ID != $GLOBALS['id'] )
     197                extract( wp_parse_post_content( $post, false ) );
     198        else
     199                global $pages, $multipage;
    182200
    183201        if ( null === $more_link_text )
    184202                $more_link_text = __( '(more…)' );
     
    187205        $has_teaser = false;
    188206
    189207        // If post password required and it doesn't match the cookie.
    190         if ( post_password_required() )
    191                 return get_the_password_form();
     208        if ( post_password_required( $post ) )
     209                return get_the_password_form( $post );
    192210
    193211        if ( $page > count( $pages ) ) // if the requested page doesn't exist
    194212                $page = count( $pages ); // give them the highest numbered page that DOES exist
     
    226244
    227245        if ( $preview ) // preview fix for javascript bug with foreign languages
    228246                $output =       preg_replace_callback( '/\%u([0-9A-F]{4})/', '_convert_urlencoded_to_entities', $output );
    229 
    230247        return $output;
    231248}
    232249
     
    12251242 *
    12261243 * @since 1.0.0
    12271244 * @uses apply_filters() Calls 'the_password_form' filter on output.
    1228  *
     1245 * @param int $id Optional. A post id. Defaults to the current post when in The Loop, undefined otherwise.
    12291246 * @return string HTML content for password form for password protected post.
    12301247 */
    1231 function get_the_password_form() {
     1248function get_the_password_form( $id = 0 ) {
    12321249        $post = get_post();
    12331250        $label = 'pwbox-' . ( empty($post->ID) ? rand() : $post->ID );
    12341251        $output = '<form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" method="post">
  • wp-includes/post.php

     
    49624962                update_post_caches( $fresh_posts, 'any', $update_term_cache, $update_meta_cache );
    49634963        }
    49644964}
     4965
     4966/**
     4967 * Parse post content for pagination
     4968 *
     4969 * @since 3.6.0
     4970 *
     4971 * @uses paginate_content()
     4972 *
     4973 * @param object $post The post object.
     4974 * @param bool $remaining Whether to parse post formats from the content. Defaults to false.
     4975 * @return array An array of values used for paginating the parsed content.
     4976 */
     4977function wp_parse_post_content( $post, $remaining = false ) {
     4978        $numpages = 1;
     4979
     4980        if ( $remaining ) {
     4981                $format = get_post_format( $post );
     4982                if ( $format && in_array( $format, array( 'image', 'audio', 'video', 'quote' ) ) ) {
     4983                        // Call get_the_post_format_*() to set $post->split_content
     4984                        // @todo Can the return value be used allowing split_content to be removed?
     4985                        switch ( $format ) {
     4986                                case 'image':
     4987                                        get_the_post_format_image( 'full', $post );
     4988                                        break;
     4989                                case 'audio':
     4990                                        get_the_post_format_media( 'audio', $post, 1 );
     4991                                        break;
     4992                                case 'video':
     4993                                        get_the_post_format_media( 'video', $post, 1 );
     4994                                        break;
     4995                                case 'quote':
     4996                                        get_the_post_format_quote( $post );
     4997                                        break;
     4998                        }
     4999                }
     5000        }
     5001
     5002        if ( strpos( $post->post_content, '<!--nextpage-->' ) ) {
     5003                $multipage = 1;
     5004                if ( $remaining && isset( $post->split_content ) )
     5005                        $pages = paginate_content( $post->split_content );
     5006                else
     5007                        $pages = paginate_content( $post->post_content );
     5008                $numpages = count( $pages );
     5009        } else {
     5010                if ( $remaining && isset( $post->split_content ) )
     5011                        $pages = array( $post->split_content );
     5012                else
     5013                        $pages = array( $post->post_content );
     5014                $multipage = 0;
     5015        }
     5016
     5017        return compact( 'multipage', 'pages', 'numpages' );
     5018}
  • wp-includes/post-formats.php

     
    866866 *
    867867 * @param string $more_link_text Optional. Content for when there is more text.
    868868 * @param bool $strip_teaser Optional. Strip teaser content before the more text. Default is false.
     869 * @param int $id Optional. A post id. Defaults to the current post when in The Loop, undefined otherwise.
    869870 * @return string The content minus the extracted post format content.
    870871 */
    871 function get_the_remaining_content( $more_link_text = null, $strip_teaser = false ) {
    872         global $more, $page, $format_pages, $multipage, $preview;
     872function get_the_remaining_content( $more_link_text = null, $strip_teaser = false, $id = 0 ) {
     873        global $more, $page, $preview;
    873874
    874         $post = get_post();
     875        extract( wp_parse_post_content( $post, true ) );
    875876
     877        $post = get_post( $id );
     878
     879        extract( wp_parse_post_content( $post, true ) );
     880
    876881        if ( null === $more_link_text )
    877882                $more_link_text = __( '(more&hellip;)' );
    878883
     
    883888        if ( post_password_required() )
    884889                return get_the_password_form();
    885890
    886         if ( $page > count( $format_pages ) ) // if the requested page doesn't exist
    887                 $page = count( $format_pages ); // give them the highest numbered page that DOES exist
     891        if ( $page > count( $pages ) ) // if the requested page doesn't exist
     892                $page = count( $pages ); // give them the highest numbered page that DOES exist
    888893
    889         $content = $format_pages[$page-1];
     894        $content = $pages[$page-1];
    890895        if ( preg_match( '/<!--more(.*?)?-->/', $content, $matches ) ) {
    891896                $content = explode( $matches[0], $content, 2 );
    892897                if ( ! empty( $matches[1] ) && ! empty( $more_link_text ) )
     
    931936 *
    932937 * @param string $more_link_text Optional. Content for when there is more text.
    933938 * @param bool $strip_teaser Optional. Strip teaser content before the more text. Default is false.
     939 * @param int $id Optional. A post id. Defaults to the current post when in The Loop, undefined otherwise.
    934940 */
    935 function the_remaining_content( $more_link_text = null, $strip_teaser = false ) {
    936         $extra = get_the_remaining_content( $more_link_text, $strip_teaser );
     941function the_remaining_content( $more_link_text = null, $strip_teaser = false, $id = 0 ) {
     942        $post = get_post( $id );
    937943
     944        $extra = get_the_remaining_content( $more_link_text, $strip_teaser, $post->ID );
     945
    938946        remove_filter( 'the_content', 'post_formats_compat', 7 );
    939         $content = apply_filters( 'the_content', $extra );
     947        $content = apply_filters( 'the_content', $extra, $post->ID );
    940948        add_filter( 'the_content', 'post_formats_compat', 7 );
    941949
    942950        echo str_replace( ']]>', ']]&gt;', $content );
  • wp-includes/comment.php

     
    17491749        }
    17501750
    17511751        if ( empty($post->post_excerpt) )
    1752                 $excerpt = apply_filters('the_content', $post->post_content);
     1752                $excerpt = apply_filters('the_content', $post->post_content, $post->ID);
    17531753        else
    17541754                $excerpt = apply_filters('the_excerpt', $post->post_excerpt);
    17551755        $excerpt = str_replace(']]>', ']]&gt;', $excerpt);
  • wp-includes/query.php

     
    36813681 * @uses do_action_ref_array() Calls 'the_post'
    36823682 * @return bool True when finished.
    36833683 */
    3684 function setup_postdata($post) {
    3685         global $id, $authordata, $currentday, $currentmonth, $page, $pages, $format_pages, $multipage, $more, $numpages;
     3684function setup_postdata( $post ) {
     3685        global $id, $authordata, $currentday, $currentmonth, $page, $pages, $multipage, $more, $numpages;
    36863686
    36873687        $id = (int) $post->ID;
    36883688
     
    36923692        $currentmonth = mysql2date('m', $post->post_date, false);
    36933693        $numpages = 1;
    36943694        $page = get_query_var('page');
    3695         if ( !$page )
     3695        if ( ! $page )
    36963696                $page = 1;
    36973697        if ( is_single() || is_page() || is_feed() )
    36983698                $more = 1;
    3699         $split_content = $content = $post->post_content;
    3700         $format = get_post_format( $post );
    3701         if ( $format && in_array( $format, array( 'image', 'audio', 'video', 'quote' ) ) ) {
    3702                 switch ( $format ) {
    3703                 case 'image':
    3704                         get_the_post_format_image( 'full', $post );
    3705                         if ( isset( $post->split_content ) )
    3706                                 $split_content = $post->split_content;
    3707                         break;
    3708                 case 'audio':
    3709                         get_the_post_format_media( 'audio', $post, 1 );
    3710                         if ( isset( $post->split_content ) )
    3711                                 $split_content = $post->split_content;
    3712                         break;
    3713                 case 'video':
    3714                         get_the_post_format_media( 'video', $post, 1 );
    3715                         if ( isset( $post->split_content ) )
    3716                                 $split_content = $post->split_content;
    3717                         break;
    3718                 case 'quote':
    3719                         get_the_post_format_quote( $post );
    3720                         if ( isset( $post->split_content ) )
    3721                                 $split_content = $post->split_content;
    3722                         break;
    3723                 }
    3724         }
    37253699
    3726         if ( strpos( $content, '<!--nextpage-->' ) ) {
    3727                 if ( $page > 1 )
     3700        extract( wp_parse_post_content( $post, false ) );
     3701
     3702        if ( $multipage && ( $page > 1 ) )
    37283703                        $more = 1;
    3729                 $multipage = 1;
    3730                 $pages = paginate_content( $content );
    3731                 $format_pages = paginate_content( $split_content );
    3732                 $numpages = count( $pages );
    3733         } else {
    3734                 $pages = array( $post->post_content );
    3735                 $format_pages = array( $split_content );
    3736                 $multipage = 0;
    3737         }
    37383704
    37393705        do_action_ref_array('the_post', array(&$post));
    37403706