Changeset 62968
- Timestamp:
- 08/02/2026 10:23:00 PM (7 days ago)
- Location:
- trunk
- Files:
-
- 2 edited
-
src/wp-admin/includes/dashboard-on-this-day.php (modified) (2 diffs)
-
tests/phpunit/tests/admin/wpDashboardOnThisDay.php (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-admin/includes/dashboard-on-this-day.php
r62681 r62968 115 115 <?php foreach ( $year_posts as $year_post ) : ?> 116 116 <?php 117 $title = get_the_title( $year_post ); 117 $title = get_the_title( $year_post ); 118 $no_title_excerpt = ''; 118 119 119 120 if ( '' === trim( $title ) ) { 120 121 $title = __( '(no title)' ); 122 123 if ( current_user_can( 'read_post', $year_post->ID ) && ! post_password_required( $year_post ) ) { 124 $excerpt = get_the_excerpt( $year_post ); 125 126 if ( is_string( $excerpt ) && '' !== $excerpt ) { 127 $no_title_excerpt = wp_trim_words( $excerpt, 15 ); 128 } 129 } 121 130 } 122 131 … … 126 135 ?> 127 136 <li> 128 <a href="<?php echo esc_url( get_permalink( $year_post ) ); ?>"><?php echo esc_html( $title ); ?></a> 137 <a href="<?php echo esc_url( get_permalink( $year_post ) ); ?>"> 138 <?php echo esc_html( $title ); ?> 139 <?php 140 if ( '' !== $no_title_excerpt ) { 141 echo esc_html( $no_title_excerpt ); 142 } 143 ?> 144 </a> 129 145 <?php if ( $show_author ) : ?> 130 146 <?php -
trunk/tests/phpunit/tests/admin/wpDashboardOnThisDay.php
r62852 r62968 59 59 * @param int $years_ago Number of years before today. 60 60 * @param string $time Post time. 61 * @param array $post_args Additional post arguments. 61 62 * @return int Post ID. 62 63 */ … … 65 66 string $title = 'A memory from last year', 66 67 int $years_ago = 1, 67 string $time = '12:00:00' 68 string $time = '12:00:00', 69 array $post_args = array() 68 70 ): int { 69 71 $post_date = current_datetime()->modify( '-' . $years_ago . ' years' )->format( 'Y-m-d' ) . ' ' . $time; 70 72 71 73 return self::factory()->post->create( 72 array( 73 'post_author' => $author_id, 74 'post_date' => $post_date, 75 'post_date_gmt' => get_gmt_from_date( $post_date ), 76 'post_status' => 'publish', 77 'post_title' => $title, 74 array_merge( 75 array( 76 'post_author' => $author_id, 77 'post_date' => $post_date, 78 'post_date_gmt' => get_gmt_from_date( $post_date ), 79 'post_status' => 'publish', 80 'post_title' => $title, 81 ), 82 $post_args 78 83 ) 79 84 ); … … 340 345 * 341 346 * @covers ::wp_dashboard_on_this_day 347 */ 348 public function test_widget_includes_trimmed_excerpt_for_untitled_posts() { 349 wp_set_current_user( self::$user_id ); 350 351 $words = array(); 352 for ( $n = 1; $n <= 20; $n++ ) { 353 $words[] = 'word' . $n; 354 } 355 356 $this->create_matching_post( 357 self::$user_id, 358 '', 359 1, 360 '12:00:00', 361 array( 362 'post_excerpt' => implode( ' ', $words ), 363 ) 364 ); 365 366 ob_start(); 367 wp_dashboard_on_this_day(); 368 $output = ob_get_clean(); 369 370 $this->assertStringContainsString( '(no title)', $output ); 371 $this->assertStringContainsString( 'word15', $output, 'The 15th word should be present.' ); 372 $this->assertStringNotContainsString( 'word16', $output, 'The 16th word should be trimmed.' ); 373 $this->assertStringContainsString( '…', $output, 'The excerpt should end with an ellipsis.' ); 374 } 375 376 /** 377 * @ticket 65116 378 * 379 * @covers ::wp_dashboard_on_this_day 380 */ 381 public function test_widget_does_not_append_excerpt_to_titled_posts() { 382 wp_set_current_user( self::$user_id ); 383 384 $this->create_matching_post( 385 self::$user_id, 386 'A titled anniversary memory', 387 1, 388 '12:00:00', 389 array( 390 'post_excerpt' => 'This excerpt should not be shown.', 391 ) 392 ); 393 394 ob_start(); 395 wp_dashboard_on_this_day(); 396 $output = ob_get_clean(); 397 398 $this->assertStringContainsString( 'A titled anniversary memory', $output ); 399 $this->assertStringNotContainsString( 'This excerpt should not be shown.', $output ); 400 } 401 402 /** 403 * @ticket 65116 404 * 405 * @covers ::wp_dashboard_on_this_day 406 */ 407 public function test_widget_includes_trimmed_excerpt_for_untitled_private_posts_authored_by_current_user() { 408 $this->set_up_dashboard_screen(); 409 410 wp_set_current_user( self::$user_id ); 411 412 $this->create_matching_post( 413 self::$user_id, 414 '', 415 1, 416 '12:00:00', 417 array( 418 'post_excerpt' => 'Readable private anniversary memory.', 419 'post_status' => 'private', 420 ) 421 ); 422 423 add_filter( 'wp_dashboard_on_this_day_query_args', array( $this, 'filter_on_this_day_query_private_posts' ) ); 424 425 ob_start(); 426 try { 427 wp_dashboard_on_this_day(); 428 $output = ob_get_clean(); 429 } finally { 430 remove_filter( 'wp_dashboard_on_this_day_query_args', array( $this, 'filter_on_this_day_query_private_posts' ) ); 431 } 432 433 $this->assertStringContainsString( '(no title)', $output ); 434 $this->assertStringContainsString( 'Readable private anniversary memory.', $output ); 435 } 436 437 /** 438 * @ticket 65116 439 * 440 * @covers ::wp_dashboard_on_this_day 441 */ 442 public function test_widget_hides_untitled_post_excerpt_for_unreadable_posts() { 443 $this->set_up_dashboard_screen(); 444 445 wp_set_current_user( self::$user_id ); 446 447 $post_id = $this->create_matching_post( 448 self::$other_user_id, 449 '', 450 1, 451 '12:00:00', 452 array( 453 'post_excerpt' => 'Unreadable private anniversary memory.', 454 'post_status' => 'private', 455 ) 456 ); 457 458 add_filter( 'wp_dashboard_on_this_day_query_args', array( $this, 'filter_on_this_day_query_private_posts' ) ); 459 460 ob_start(); 461 try { 462 wp_dashboard_on_this_day(); 463 $output = ob_get_clean(); 464 } finally { 465 remove_filter( 'wp_dashboard_on_this_day_query_args', array( $this, 'filter_on_this_day_query_private_posts' ) ); 466 } 467 468 $this->assertFalse( current_user_can( 'read_post', $post_id ) ); 469 $this->assertStringContainsString( '(no title)', $output ); 470 $this->assertStringNotContainsString( 'Unreadable private anniversary memory.', $output ); 471 } 472 473 /** 474 * @ticket 65116 475 * 476 * @covers ::wp_dashboard_on_this_day 477 */ 478 public function test_widget_hides_untitled_post_excerpt_for_password_protected_posts() { 479 $this->set_up_dashboard_screen(); 480 481 wp_set_current_user( self::$user_id ); 482 483 $this->create_matching_post( 484 self::$user_id, 485 '', 486 1, 487 '12:00:00', 488 array( 489 'post_excerpt' => 'Private anniversary memory.', 490 'post_password' => 'secret', 491 ) 492 ); 493 494 ob_start(); 495 wp_dashboard_on_this_day(); 496 $output = ob_get_clean(); 497 498 $this->assertStringNotContainsString( 'Private anniversary memory.', $output ); 499 } 500 501 /** 502 * @covers ::wp_dashboard_on_this_day 342 503 * @covers ::wp_dashboard_on_this_day_get_posts 343 504 */ … … 354 515 355 516 $this->assertStringContainsString( '10 posts have been published on <strong>' . wp_date( 'F jS' ) . '</strong>:', $output ); 356 $this->assert StringContainsString( 'Anniversary post 1<', $output );357 $this->assert StringContainsString( 'Anniversary post 10<', $output );517 $this->assertMatchesRegularExpression( '/>\s*Anniversary post 1\s*<\/a>/', $output ); 518 $this->assertMatchesRegularExpression( '/>\s*Anniversary post 10\s*<\/a>/', $output ); 358 519 $this->assertStringNotContainsString( 'Anniversary post 11', $output ); 359 520 } 521 522 /** 523 * Filters the On This Day query to include private posts. 524 * 525 * @param array $args WP_Query arguments. 526 * @return array Filtered query arguments. 527 */ 528 public function filter_on_this_day_query_private_posts( $args ) { 529 $args['post_status'] = array( 'private' ); 530 531 return $args; 532 } 360 533 }
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)