Ticket #42814: 42814.5.diff
File 42814.5.diff, 12.0 KB (added by , 6 years ago) |
---|
-
src/wp-includes/class-wp-query.php
IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8
4155 4155 return; 4156 4156 } 4157 4157 4158 $elements = $this->generate_postdata( $post ); 4159 if ( false === $elements ) { 4160 return; 4161 } 4162 4163 $id = $elements['id']; 4164 $authordata = $elements['authordata']; 4165 $currentday = $elements['currentday']; 4166 $currentmonth = $elements['currentmonth']; 4167 $page = $elements['page']; 4168 $pages = $elements['pages']; 4169 $multipage = $elements['multipage']; 4170 $more = $elements['more']; 4171 $numpages = $elements['numpages']; 4172 4173 return true; 4174 } 4175 4176 /** 4177 * Generate post data. 4178 * 4179 * @since 5.2.0 4180 * 4181 * @param WP_Post|object|int $post WP_Post instance or Post ID/object. 4182 * @return array|bool $elements Elements of post or false on failure. 4183 */ 4184 public function generate_postdata( $post ) { 4185 4186 if ( ! ( $post instanceof WP_Post ) ) { 4187 $post = get_post( $post ); 4188 } 4189 4190 if ( ! $post ) { 4191 return false; 4192 } 4193 4158 4194 $id = (int) $post->ID; 4159 4195 4160 4196 $authordata = get_userdata( $post->post_author ); … … 4235 4271 */ 4236 4272 do_action_ref_array( 'the_post', array( &$post, &$this ) ); 4237 4273 4238 return true; 4274 $elements = compact( 'id','authordata', 'currentday', 'currentmonth', 'page', 'pages', 'multipage', 'more', 'numpages' ); 4275 4276 return $elements; 4239 4277 } 4240 4278 /** 4241 4279 * After looping through a nested query, this function -
src/wp-includes/default-filters.php
IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8
182 182 add_filter( 'the_excerpt', 'convert_chars' ); 183 183 add_filter( 'the_excerpt', 'wpautop' ); 184 184 add_filter( 'the_excerpt', 'shortcode_unautop' ); 185 add_filter( 'get_the_excerpt', 'wp_trim_excerpt' );185 add_filter( 'get_the_excerpt', 'wp_trim_excerpt', 10, 2 ); 186 186 187 187 add_filter( 'the_post_thumbnail_caption', 'wptexturize' ); 188 188 add_filter( 'the_post_thumbnail_caption', 'convert_smilies' ); -
src/wp-includes/formatting.php
IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8
3676 3676 * The ' […]' string can be modified by plugins/themes using the {@see 'excerpt_more'} filter 3677 3677 * 3678 3678 * @since 1.5.0 3679 * @since 5.2.0 Added '$post' param 3679 3680 * 3680 3681 * @param string $text Optional. The excerpt. If set to empty, an excerpt is generated. 3682 * @param WP_Post|object|int $post Optional. WP_Post instance or Post ID/object. Default is null. 3681 3683 * @return string The excerpt. 3682 3684 */ 3683 function wp_trim_excerpt( $text = '' ) {3685 function wp_trim_excerpt( $text = '', $post = null ) { 3684 3686 $raw_excerpt = $text; 3685 3687 if ( '' == $text ) { 3686 $text = get_the_content( '' ); 3688 $post = get_post( $post ); 3689 $text = get_the_content( '', false, $post ); 3687 3690 3688 3691 $text = strip_shortcodes( $text ); 3689 3692 $text = excerpt_remove_blocks( $text ); -
src/wp-includes/post-template.php
IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8
253 253 * Retrieve the post content. 254 254 * 255 255 * @since 0.71 256 * @since 5.2.0 Added '$post' param 256 257 * 257 258 * @global int $page Page number of a single post/page. 258 259 * @global int $more Boolean indicator for whether single post/page is being viewed. … … 263 264 * 264 265 * @param string $more_link_text Optional. Content for when there is more text. 265 266 * @param bool $strip_teaser Optional. Strip teaser content before the more text. Default is false. 267 * @param WP_Post|object|int $post Optional. WP_Post instance or Post ID/object. Default is null. 266 268 * @return string 267 269 */ 268 function get_the_content( $more_link_text = null, $strip_teaser = false ) {270 function get_the_content( $more_link_text = null, $strip_teaser = false, $post = null ) { 269 271 global $page, $more, $preview, $pages, $multipage; 270 272 271 $post = get_post(); 273 274 $_post = get_post( $post ); 275 276 if ( ! ( $_post instanceof WP_Post ) ) { 277 return ''; 278 } 279 280 if ( null === $post ) { 281 $elements = compact( 'page', 'more', 'preview', 'pages', 'multipage' ); 282 } else { 283 $elements = generate_postdata( $_post ); 284 } 285 272 286 273 287 if ( null === $more_link_text ) { 274 288 $more_link_text = sprintf( 275 289 '<span aria-label="%1$s">%2$s</span>', 276 290 sprintf( 277 291 /* translators: %s: Name of current post */ 278 292 __( 'Continue reading %s' ), 279 the_title_attribute( array( 'echo' => false ) )293 the_title_attribute( array( 'echo' => false, 'post' => $_post, ) ) 280 294 ), 281 295 __( '(more…)' ) 282 296 ); … … 286 300 $has_teaser = false; 287 301 288 302 // If post password required and it doesn't match the cookie. 289 if ( post_password_required( $ post ) ) {290 return get_the_password_form( $ post );303 if ( post_password_required( $_post ) ) { 304 return get_the_password_form( $_post ); 291 305 } 292 306 293 if ( $ page > count( $pages) ) { // if the requested page doesn't exist294 $ page = count( $pages); // give them the highest numbered page that DOES exist307 if ( $elements['page'] > count( $elements['pages'] ) ) { // if the requested page doesn't exist 308 $elements['page'] = count( $elements['pages'] ); // give them the highest numbered page that DOES exist 295 309 } 296 310 297 $content = $ pages[ $page- 1 ];311 $content = $elements['pages'][ $elements['page'] - 1 ]; 298 312 if ( preg_match( '/<!--more(.*?)?-->/', $content, $matches ) ) { 299 313 $content = explode( $matches[0], $content, 2 ); 300 314 if ( ! empty( $matches[1] ) && ! empty( $more_link_text ) ) { … … 306 320 $content = array( $content ); 307 321 } 308 322 309 if ( false !== strpos( $ post->post_content, '<!--noteaser-->' ) && ( ! $multipage || $page== 1 ) ) {323 if ( false !== strpos( $_post->post_content, '<!--noteaser-->' ) && ( ! $elements['multipage'] || $elements['page'] == 1 ) ) { 310 324 $strip_teaser = true; 311 325 } 312 326 313 327 $teaser = $content[0]; 314 328 315 if ( $ more&& $strip_teaser && $has_teaser ) {329 if ( $elements['more'] && $strip_teaser && $has_teaser ) { 316 330 $teaser = ''; 317 331 } 318 332 319 333 $output .= $teaser; 320 334 321 335 if ( count( $content ) > 1 ) { 322 if ( $ more) {323 $output .= '<span id="more-' . $ post->ID . '"></span>' . $content[1];336 if ( $elements['more'] ) { 337 $output .= '<span id="more-' . $_post->ID . '"></span>' . $content[1]; 324 338 } else { 325 339 if ( ! empty( $more_link_text ) ) { 326 340 … … 332 346 * @param string $more_link_element Read More link element. 333 347 * @param string $more_link_text Read More text. 334 348 */ 335 $output .= apply_filters( 'the_content_more_link', ' <a href="' . get_permalink( ) . "#more-{$post->ID}\" class=\"more-link\">$more_link_text</a>", $more_link_text );349 $output .= apply_filters( 'the_content_more_link', ' <a href="' . get_permalink( $_post ) . "#more-{$_post->ID}\" class=\"more-link\">$more_link_text</a>", $more_link_text ); 336 350 } 337 351 $output = force_balance_tags( $output ); 338 352 } -
src/wp-includes/query.php
IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8
1111 1111 1112 1112 return false; 1113 1113 } 1114 1115 /** 1116 * Generate post data. 1117 * 1118 * @since 5.2.0 1119 * 1120 * @global WP_Query $wp_query Global WP_Query instance. 1121 * 1122 * @param WP_Post|object|int $post WP_Post instance or Post ID/object. 1123 * @return array|bool $elements Elements of post or false on failure. 1124 */ 1125 function generate_postdata( $post ) { 1126 global $wp_query; 1127 1128 if ( ! empty( $wp_query ) && $wp_query instanceof WP_Query ) { 1129 return $wp_query->generate_postdata( $post ); 1130 } 1131 1132 return false; 1133 } -
tests/phpunit/tests/query/generatePostdata.php
IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8
1 <?php 2 3 /** 4 * @group query 5 * @covers ::generate_postdata 6 */ 7 class Tests_Query_GeneratePostdata extends WP_UnitTestCase { 8 9 /** 10 * @ticket 42814 11 */ 12 public function test_setup_by_id() { 13 $p = self::factory()->post->create_and_get(); 14 $data = generate_postdata( $p->ID ); 15 $this->assertSame( $p->ID, $data['id'] ); 16 } 17 18 /** 19 * @ticket 42814 20 */ 21 public function test_setup_by_fake_post() { 22 $fake = new stdClass; 23 $fake->ID = 98765; 24 $data = generate_postdata( $fake->ID ); 25 26 // Fails because there's no post with this ID. 27 $this->assertNotSame( $fake->ID, $data['id'] ); 28 } 29 30 /** 31 * @ticket 42814 32 */ 33 public function test_setup_by_postish_object() { 34 $p = self::factory()->post->create(); 35 36 $post = new stdClass(); 37 $post->ID = $p; 38 $data = generate_postdata( $p ); 39 40 $this->assertSame( $p, $data['id'] ); 41 } 42 43 /** 44 * @ticket 42814 45 */ 46 public function test_authordata() { 47 $u = self::factory()->user->create_and_get(); 48 $p = self::factory()->post->create_and_get( 49 array( 50 'post_author' => $u->ID, 51 ) 52 ); 53 $data = generate_postdata( $p ); 54 55 $this->assertNotEmpty( $data['authordata'] ); 56 $this->assertEquals( $u, $data['authordata'] ); 57 } 58 59 /** 60 * @ticket 42814 61 */ 62 public function test_currentday() { 63 $p = self::factory()->post->create_and_get( 64 array( 65 'post_date' => '1980-09-09 06:30:00', 66 ) 67 ); 68 $data = generate_postdata( $p ); 69 70 $this->assertSame( '09.09.80', $data['currentday'] ); 71 } 72 73 public function test_currentmonth() { 74 $p = self::factory()->post->create_and_get( 75 array( 76 'post_date' => '1980-09-09 06:30:00', 77 ) 78 ); 79 $data = generate_postdata( $p ); 80 81 $this->assertSame( '09', $data['currentmonth'] ); 82 } 83 84 /** 85 * @ticket 42814 86 */ 87 public function test_single_page() { 88 $post = self::factory()->post->create_and_get( 89 array( 90 'post_content' => 'Page 0', 91 ) 92 ); 93 $data = generate_postdata( $post ); 94 95 $this->assertSame( 0, $data['multipage'] ); 96 $this->assertSame( 1, $data['numpages'] ); 97 $this->assertEquals( array( 'Page 0' ), $data['pages'] ); 98 } 99 100 /** 101 * @ticket 42814 102 */ 103 public function test_multi_page() { 104 $post = self::factory()->post->create_and_get( 105 array( 106 'post_content' => 'Page 0<!--nextpage-->Page 1<!--nextpage-->Page 2<!--nextpage-->Page 3', 107 ) 108 ); 109 $data = generate_postdata( $post ); 110 111 $this->assertSame( 1, $data['multipage'] ); 112 $this->assertSame( 4, $data['numpages'] ); 113 $this->assertEquals( array( 'Page 0', 'Page 1', 'Page 2', 'Page 3' ), $data['pages'] ); 114 } 115 116 /** 117 * @ticket 42814 118 */ 119 public function test_nextpage_at_start_of_content() { 120 $post = self::factory()->post->create_and_get( 121 array( 122 'post_content' => '<!--nextpage-->Page 1<!--nextpage-->Page 2<!--nextpage-->Page 3', 123 ) 124 ); 125 $data = generate_postdata( $post ); 126 127 $this->assertSame( 1, $data['multipage'] ); 128 $this->assertSame( 3, $data['numpages'] ); 129 $this->assertEquals( array( 'Page 1', 'Page 2', 'Page 3' ), $data['pages'] ); 130 } 131 132 /** 133 * @ticket 42814 134 */ 135 public function test_trim_nextpage_linebreaks() { 136 $post = self::factory()->post->create_and_get( 137 array( 138 'post_content' => "Page 0\n<!--nextpage-->\nPage 1\nhas a line break\n<!--nextpage-->Page 2<!--nextpage-->\n\nPage 3", 139 ) 140 ); 141 $data = generate_postdata( $post ); 142 143 $this->assertEquals( array( 'Page 0', "Page 1\nhas a line break", 'Page 2', "\nPage 3" ), $data['pages'] ); 144 } 145 }