WordPress.org

Make WordPress Core

Ticket #27573: 27573.2.diff

File 27573.2.diff, 2.5 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                                $attachment = array(
     165                                        'post_mime_type' => $metadata['image']['mime'],
     166                                        'post_type' => 'attachment',
     167                                        'post_content' => '',
     168                                );
     169                                $sub_attachment_id = wp_insert_attachment( $attachment, $uploaded['file'] );
     170                                add_post_meta( $sub_attachment_id, $hash, 1 );
     171                                $attach_data = wp_generate_attachment_metadata( $sub_attachment_id, $uploaded['file'] );
     172                                wp_update_attachment_metadata( $sub_attachment_id, $attach_data );
     173                                update_post_meta( $attachment_id, '_thumbnail_id', $sub_attachment_id );
     174                        }
    145175                }
    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                 }
    159176        }
    160177
    161178        // remove the blob of binary data from the array