Introduce `maybe_regenerate_attachment_metadata( $attachment )`. On the Edit Media screen, call it for Audio and Video files.
The functions checks if the item is lacking metadata altogether. If a video or audio file was uploaded prior to 3.6, it does not have any metadata. This tries to fix it. Implements locking via a transient to protect against this running in parallel with another request. This is the minimum viable product for #26825, but leaving the ticket open unless this function needs to be called in other places. See #26825. git-svn-id: https://develop.svn.wordpress.org/trunk@27127 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
4b047c21ab
commit
d6cb8c399e
|
@ -2636,10 +2636,14 @@ function edit_form_image_editor( $post ) {
|
|||
<?php
|
||||
elseif ( $attachment_id && 0 === strpos( $post->post_mime_type, 'audio/' ) ):
|
||||
|
||||
maybe_regenerate_attachment_metadata( $post );
|
||||
|
||||
echo wp_audio_shortcode( array( 'src' => $att_url ) );
|
||||
|
||||
elseif ( $attachment_id && 0 === strpos( $post->post_mime_type, 'video/' ) ):
|
||||
|
||||
maybe_regenerate_attachment_metadata( $post );
|
||||
|
||||
$meta = wp_get_attachment_metadata( $attachment_id );
|
||||
$w = ! empty( $meta['width'] ) ? min( $meta['width'], 600 ) : 0;
|
||||
$h = 0;
|
||||
|
|
|
@ -2194,3 +2194,26 @@ function get_post_gallery_images( $post = 0 ) {
|
|||
$gallery = get_post_gallery( $post, false );
|
||||
return empty( $gallery['src'] ) ? array() : $gallery['src'];
|
||||
}
|
||||
|
||||
/**
|
||||
* If an attachment is missing its metadata, try to regenerate it
|
||||
*
|
||||
* @param post $attachment Post object.
|
||||
*/
|
||||
function maybe_regenerate_attachment_metadata( $attachment ) {
|
||||
if ( empty( $attachment ) || ( empty( $attachment->ID ) || ! $attachment_id = (int) $attachment->ID ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$file = get_attached_file( $attachment_id );
|
||||
$meta = wp_get_attachment_metadata( $attachment_id );
|
||||
if ( empty( $meta ) && file_exists( $file ) ) {
|
||||
$_meta = get_post_meta( $attachment_id );
|
||||
$regeneration_lock = 'wp_regenerating_' . $attachment_id;
|
||||
if ( ! array_key_exists( '_wp_attachment_metadata', $_meta ) && ! get_transient( $regeneration_lock ) ) {
|
||||
set_transient( $regeneration_lock, $file );
|
||||
wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $file ) );
|
||||
delete_transient( $regeneration_lock );
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue