WordPress.org

Make WordPress Core

Ticket #27573: 27573.3.diff

File 27573.3.diff, 3.0 KB (added by wonderboymusic, 7 years ago)
  • src/wp-admin/includes/image.php

     
    134134        }
    135135
    136136        if ( $support && ! empty( $metadata['image']['data'] ) ) {
    137                 $ext = '.jpg';
    138                 switch ( $metadata['image']['mime'] ) {
    139                 case 'image/gif':
    140                         $ext = '.gif';
    141                         break;
    142                 case 'image/png':
    143                         $ext = '.png';
    144                         break;
     137                // check for existing cover
     138                $hash = md5( $metadata['image']['data'] );
     139                $posts = get_posts( array(
     140                        'fields' => 'ids',
     141                        'post_type' => 'attachment',
     142                        'post_mime_type' => $metadata['image']['mime'],
     143                        'post_status' => 'inherit',
     144                        'posts_per_page' => 1,
     145                        'meta_query' => array( array( 'key' => $hash ) )
     146                ) );
     147                $exists = reset( $posts );
     148
     149                if ( ! empty( $exists ) ) {
     150                        update_post_meta( $attachment_id, '_thumbnail_id', $exists );
     151                } else {
     152                        $ext = '.jpg';
     153                        switch ( $metadata['image']['mime'] ) {
     154                        case 'image/gif':
     155                                $ext = '.gif';
     156                                break;
     157                        case 'image/png':
     158                                $ext = '.png';
     159                                break;
     160                        }
     161                        $basename = str_replace( '.', '-', basename( $file ) ) . '-image' . $ext;
     162                        $uploaded = wp_upload_bits( $basename, '', $metadata['image']['data'] );
     163                        if ( false === $uploaded['error'] ) {
     164                                $image_attachment = array(
     165                                        'post_mime_type' => $metadata['image']['mime'],
     166                                        'post_type' => 'attachment',
     167                                        'post_content' => '',
     168                                );
     169                                /**
     170                                 * Filter the parameters for the attachment thumbnail creation.
     171                                 *
     172                                 * @since 3.9.0
     173                                 *
     174                                 * @param array $image_attachment An array of parameters to create the thumbnail.
     175                                 * @param array $metadata   Current attachment metadata.
     176                                 * @param array $uploaded   An array containing the thumbnail path and url.
     177                                 */
     178                                $image_attachment = apply_filters( 'attachment_thumbnail_args', $image_attachment, $metadata, $uploaded );
     179
     180                                $sub_attachment_id = wp_insert_attachment( $image_attachment, $uploaded['file'] );
     181                                add_post_meta( $sub_attachment_id, $hash, 1 );
     182                                $attach_data = wp_generate_attachment_metadata( $sub_attachment_id, $uploaded['file'] );
     183                                wp_update_attachment_metadata( $sub_attachment_id, $attach_data );
     184                                update_post_meta( $attachment_id, '_thumbnail_id', $sub_attachment_id );
     185                        }
    145186                }
    146                 $basename = str_replace( '.', '-', basename( $file ) ) . '-image' . $ext;
    147                 $uploaded = wp_upload_bits( $basename, '', $metadata['image']['data'] );
    148                 if ( false === $uploaded['error'] ) {
    149                         $attachment = array(
    150                                 'post_mime_type' => $metadata['image']['mime'],
    151                                 'post_type' => 'attachment',
    152                                 'post_content' => '',
    153                         );
    154                         $sub_attachment_id = wp_insert_attachment( $attachment, $uploaded['file'] );
    155                         $attach_data = wp_generate_attachment_metadata( $sub_attachment_id, $uploaded['file'] );
    156                         wp_update_attachment_metadata( $sub_attachment_id, $attach_data );
    157                         update_post_meta( $attachment_id, '_thumbnail_id', $sub_attachment_id );
    158                 }
    159187        }
    160188
    161189        // remove the blob of binary data from the array