Make WordPress Core

Changeset 57755

Timestamp:
03/02/2024 08:13:02 PM (5 months ago)
Author:
joedolson
Message:

Media: Accessibility: Copy attachment properties on site icon crop.

Add parity between site icon, custom header, and default image crop behaviors. [53027] fixed a bug where alt text and caption were not copied on custom headers, but did not apply that change in any other context.

Deprecate the create_attachment_object method in the Wp_Site_Icon and Custom_Image_Header classes and replace that functionality with the new function wp_copy_parent_attachment_properties() to improve consistency.

Props afercia, rcreators, jorbin, joedolson, huzaifaalmesbah, shailu25, swissspidy, mukesh27.
Fixes #60524.

Location:
trunk
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/includes/ajax-actions.php

    r57648 r57755  
    40364036
    40374037            /** This filter is documented in wp-admin/includes/class-custom-image-header.php */
    4038             $cropped    = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication.
    4039             $attachment = $wp_site_icon->create_attachment_object( $cropped, $attachment_id );
    4040             unset( $attachment['ID'] );
     4038            $cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication.
     4039
     4040            // Copy attachment properties.
     4041            $attachment = wp_copy_parent_attachment_properties( $cropped, $attachment_id, $context );
    40414042
    40424043            // Update the attachment.
    ��  
    40664067            $cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication.
    40674068
    4068             $parent_url      = wp_get_attachment_url( $attachment_id );
    4069             $parent_basename = wp_basename( $parent_url );
    4070             $url             = str_replace( $parent_basename, wp_basename( $cropped ), $parent_url );
    4071 
    4072             $size       = wp_getimagesize( $cropped );
    4073             $image_type = ( $size ) ? $size['mime'] : 'image/jpeg';
    4074 
    4075             // Get the original image's post to pre-populate the cropped image.
    4076             $original_attachment  = get_post( $attachment_id );
    4077             $sanitized_post_title = sanitize_file_name( $original_attachment->post_title );
    4078             $use_original_title   = (
    4079                 ( '' !== trim( $original_attachment->post_title ) ) &&
    4080                 /*
    4081                  * Check if the original image has a title other than the "filename" default,
    4082                  * meaning the image had a title when originally uploaded or its title was edited.
    4083                  */
    4084                 ( $parent_basename !== $sanitized_post_title ) &&
    4085                 ( pathinfo( $parent_basename, PATHINFO_FILENAME ) !== $sanitized_post_title )
    4086             );
    4087             $use_original_description = ( '' !== trim( $original_attachment->post_content ) );
    4088 
    4089             $attachment = array(
    4090                 'post_title'     => $use_original_title ? $original_attachment->post_title : wp_basename( $cropped ),
    4091                 'post_content'   => $use_original_description ? $original_attachment->post_content : $url,
    4092                 'post_mime_type' => $image_type,
    4093                 'guid'           => $url,
    4094                 'context'        => $context,
    4095             );
    4096 
    4097             // Copy the image caption attribute (post_excerpt field) from the original image.
    4098             if ( '' !== trim( $original_attachment->post_excerpt ) ) {
    4099                 $attachment['post_excerpt'] = $original_attachment->post_excerpt;
    4100             }
    4101 
    4102             // Copy the image alt text attribute from the original image.
    4103             if ( '' !== trim( $original_attachment->_wp_attachment_image_alt ) ) {
    4104                 $attachment['meta_input'] = array(
    4105                     '_wp_attachment_image_alt' => wp_slash( $original_attachment->_wp_attachment_image_alt ),
    4106                 );
    4107             }
     4069            // Copy attachment properties.
     4070            $attachment = wp_copy_parent_attachment_properties( $cropped, $attachment_id, $context );
    41084071
    41094072            $attachment_id = wp_insert_attachment( $attachment, $cropped );
  • trunk/src/wp-admin/includes/class-custom-image-header.php

    r57364 r57755  
    10781078        $cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication.
    10791079
    1080         $attachment = $this->create_attachment_object( $cropped, $attachment_id );
     1080        $attachment = );
    10811081
    10821082        if ( ! empty( $_POST['create-new-attachment'] ) ) {
     
    13151315     *
    13161316     * @since 3.9.0
     1317
    13171318     *
    13181319     * @param string $cropped              Cropped image URL.
     
    13211322     */
    13221323    final public function create_attachment_object( $cropped, $parent_attachment_id ) {
     1324
    13231325        $parent     = get_post( $parent_attachment_id );
    13241326        $parent_url = wp_get_attachment_url( $parent->ID );
     
    14221424        $cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication.
    14231425
    1424         $attachment = $this->create_attachment_object( $cropped, $attachment_id );
     1426        $attachment = );
    14251427
    14261428        $previous = $this->get_previous_crop( $attachment );
  • trunk/src/wp-admin/includes/class-wp-site-icon.php

    r55678 r57755  
    7979     *
    8080     * @since 4.3.0
     81
    8182     *
    8283     * @param string $cropped              Cropped image URL.
     
    8586     */
    8687    public function create_attachment_object( $cropped, $parent_attachment_id ) {
     88
     89
    8790        $parent     = get_post( $parent_attachment_id );
    8891        $parent_url = wp_get_attachment_url( $parent->ID );
  • trunk/src/wp-admin/includes/image.php

    r57524 r57755  
    481481
    482482    return $image_meta;
     483
     484
     485
     486
     487
     488
     489
     490
     491
     492
     493
     494
     495
     496
     497
     498
     499
     500
     501
     502
     503
     504
     505
     506
     507
     508
     509
     510
     511
     512
     513
     514
     515
     516
     517
     518
     519
     520
     521
     522
     523
     524
     525
     526
     527
     528
     529
     530
     531
     532
     533
     534
     535
     536
     537
     538
    483539}
    484540
  • trunk/tests/phpunit/tests/image/header.php

    r56548 r57755  
    109109    }
    110110
    111     public function test_create_attachment_object() {
    112         $id = wp_insert_attachment(
    113             array(
    114                 'post_status' => 'publish',
    115                 'post_title'  => 'foo.png',
    116                 'post_type'   => 'post',
    117                 'guid'        => 'http://localhost/foo.png',
    118             )
    119         );
    120 
    121         $cropped = 'foo-cropped.png';
    122 
    123         $object = $this->custom_image_header->create_attachment_object( $cropped, $id );
    124         $this->assertSame( 'foo-cropped.png', $object['post_title'] );
    125         $this->assertSame( 'http://localhost/' . $cropped, $object['guid'] );
    126         $this->assertSame( 'custom-header', $object['context'] );
    127         $this->assertSame( 'image/jpeg', $object['post_mime_type'] );
    128     }
    129 
    130111    public function test_insert_cropped_attachment() {
    131112        $id = wp_insert_attachment(
     
    139120
    140121        $cropped = 'foo-cropped.png';
    141         $object  = $this->custom_image_header->create_attachment_object( $cropped, $id );
     122        $object  = );
    142123
    143124        $cropped_id = $this->custom_image_header->insert_attachment( $object, $cropped );
     
    162143        // Create inital crop object.
    163144        $cropped_1 = 'foo-cropped-1.png';
    164         $object    = $this->custom_image_header->create_attachment_object( $cropped_1, $id );
     145        $object    = );
    165146
    166147        // Ensure no previous crop exists.
     
    176157        // Create second crop.
    177158        $cropped_2 = 'foo-cropped-2.png';
    178         $object    = $this->custom_image_header->create_attachment_object( $cropped_2, $id );
     159        $object    = ( $cropped_2, $id );
    179160
    180161        // Test that a previous crop is found.
  • trunk/tests/phpunit/tests/image/siteIcon.php

    r52010 r57755  
    9999    }
    100100
    101     public function test_create_attachment_object() {
    102         $attachment_id = $this->insert_attachment();
    103         $parent_url    = get_post( $attachment_id )->guid;
    104         $cropped       = str_replace( wp_basename( $parent_url ), 'cropped-test-image.jpg', $parent_url );
    105 
    106         $object = $this->wp_site_icon->create_attachment_object( $cropped, $attachment_id );
    107 
    108         $this->assertSame( $object['post_title'], 'cropped-test-image.jpg' );
    109         $this->assertSame( $object['context'], 'site-icon' );
    110         $this->assertSame( $object['post_mime_type'], 'image/jpeg' );
    111         $this->assertSame( $object['post_content'], $cropped );
    112         $this->assertSame( $object['guid'], $cropped );
    113     }
    114 
    115101    public function test_insert_cropped_attachment() {
    116102        $attachment_id = $this->insert_attachment();
     
    118104        $cropped       = str_replace( wp_basename( $parent_url ), 'cropped-test-image.jpg', $parent_url );
    119105
    120         $object     = $this->wp_site_icon->create_attachment_object( $cropped, $attachment_id );
     106        $object     = );
    121107        $cropped_id = $this->wp_site_icon->insert_attachment( $object, $cropped );
    122108
Note: See TracChangeset for help on using the changeset viewer.