diff --git a/src/wp-admin/includes/image.php b/src/wp-admin/includes/image.php index d58bdc88f6..3b2de95db8 100644 --- a/src/wp-admin/includes/image.php +++ b/src/wp-admin/includes/image.php @@ -142,20 +142,28 @@ function wp_update_image_subsizes( $attachment_id ) { // Previously failed upload? // If there is an uploaded file, make all sub-sizes and generate all of the attachment meta. if ( ! empty( $image_file ) ) { - return wp_create_image_subsizes( $image_file, $attachment_id ); + $image_meta = wp_create_image_subsizes( $image_file, $attachment_id ); } else { return new WP_Error( 'invalid_attachment', __( 'The attached file cannot be found.' ) ); } + } else { + $missing_sizes = wp_get_missing_image_subsizes( $attachment_id ); + + if ( empty( $missing_sizes ) ) { + return $image_meta; + } + + // This also updates the image meta. + $image_meta = _wp_make_subsizes( $missing_sizes, $image_file, $image_meta, $attachment_id ); } - $missing_sizes = wp_get_missing_image_subsizes( $attachment_id ); + /** This filter is documented in wp-admin/includes/image.php */ + $image_meta = apply_filters( 'wp_generate_attachment_metadata', $image_meta, $attachment_id, 'update' ); - if ( empty( $missing_sizes ) ) { - return $image_meta; - } + // Save the updated metadata. + wp_update_attachment_metadata( $attachment_id, $image_meta ); - // This also updates the image meta. - return _wp_make_subsizes( $missing_sizes, $image_file, $image_meta, $attachment_id ); + return $image_meta; } /** @@ -275,6 +283,9 @@ function wp_create_image_subsizes( $file, $attachment_id ) { $image_meta['image_meta']['orientation'] = 1; } + // Initial save of the new metadata when the original image was scaled. + // At this point the file was uploaded and moved to the uploads directory + // but the image sub-sizes haven't been created yet and the `sizes` array is empty. wp_update_attachment_metadata( $attachment_id, $image_meta ); } else { // TODO: log errors. @@ -307,11 +318,15 @@ function wp_create_image_subsizes( $file, $attachment_id ) { $image_meta['image_meta']['orientation'] = 1; } + // Initial save of the new metadata when the original image was rotated. wp_update_attachment_metadata( $attachment_id, $image_meta ); } else { // TODO: log errors. } } + } else { + // Initial save of the new metadata when the image was not scaled or rotated. + wp_update_attachment_metadata( $attachment_id, $image_meta ); } $new_sizes = wp_get_registered_image_subsizes(); @@ -578,10 +593,12 @@ function wp_generate_attachment_metadata( $attachment_id, $file ) { * * @since 2.1.0 * - * @param array $metadata An array of attachment meta data. - * @param int $attachment_id Current attachment ID. + * @param array $metadata An array of attachment meta data. + * @param int $attachment_id Current attachment ID. + * @param string $context Additional context. Can be 'create' when metadata was initially created for new attachment + * or 'update' when the metadata was updated. */ - return apply_filters( 'wp_generate_attachment_metadata', $metadata, $attachment_id ); + return apply_filters( 'wp_generate_attachment_metadata', $metadata, $attachment_id, 'create' ); } /**