Make WordPress Core


Ignore:
Timestamp:
03/30/2014 08:53:21 PM (12 years ago)
Author:
wonderboymusic
Message:

In wp_generate_attachment_metadata(), when an audio or video files contains upload-able image bits in its ID3 tags, only upload it if the image has not already been uploaded. Determine this by checking for a _cover_hash value in post meta that matches the md5 representation of the bits.

This prevents uploading an album of 10 songs and subsequently uploading 10 copies of the same album cover.

Props GregLone for the new filter/filter docs: 'attachment_thumbnail_args'.
Fixes #27573.

File:
1 edited

Legend:

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

    r27657 r27863  
    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;
    145                 }
    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 );
     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_key' => '_cover_hash',
     146                        'meta_value' => $hash
     147                ) );
     148                $exists = reset( $posts );
     149
     150                if ( ! empty( $exists ) ) {
     151                        update_post_meta( $attachment_id, '_thumbnail_id', $exists );
     152                } else {
     153                        $ext = '.jpg';
     154                        switch ( $metadata['image']['mime'] ) {
     155                        case 'image/gif':
     156                                $ext = '.gif';
     157                                break;
     158                        case 'image/png':
     159                                $ext = '.png';
     160                                break;
     161                        }
     162                        $basename = str_replace( '.', '-', basename( $file ) ) . '-image' . $ext;
     163                        $uploaded = wp_upload_bits( $basename, '', $metadata['image']['data'] );
     164                        if ( false === $uploaded['error'] ) {
     165                                $image_attachment = array(
     166                                        'post_mime_type' => $metadata['image']['mime'],
     167                                        'post_type' => 'attachment',
     168                                        'post_content' => '',
     169                                );
     170                                /**
     171                                 * Filter the parameters for the attachment thumbnail creation.
     172                                 *
     173                                 * @since 3.9.0
     174                                 *
     175                                 * @param array $image_attachment An array of parameters to create the thumbnail.
     176                                 * @param array $metadata   Current attachment metadata.
     177                                 * @param array $uploaded   An array containing the thumbnail path and url.
     178                                 */
     179                                $image_attachment = apply_filters( 'attachment_thumbnail_args', $image_attachment, $metadata, $uploaded );
     180
     181                                $sub_attachment_id = wp_insert_attachment( $image_attachment, $uploaded['file'] );
     182                                add_post_meta( $sub_attachment_id, '_cover_hash', $hash );
     183                                $attach_data = wp_generate_attachment_metadata( $sub_attachment_id, $uploaded['file'] );
     184                                wp_update_attachment_metadata( $sub_attachment_id, $attach_data );
     185                                update_post_meta( $attachment_id, '_thumbnail_id', $sub_attachment_id );
     186                        }
    158187                }
    159188        }
Note: See TracChangeset for help on using the changeset viewer.