Media: Allow PDF fallbacks filter to process custom sizes.
This fixes an oversight in [39246], which added a hook for filtering the array of sizes used for PDF thumbnails, but failed to provide a way for sizes added through `add_image_size()` to be processed. Props gitlost. Fixes #39231. See #38594. git-svn-id: https://develop.svn.wordpress.org/trunk@39617 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
bad6ddc45d
commit
1f48d453d8
@ -221,16 +221,30 @@ function wp_generate_attachment_metadata( $attachment_id, $file ) {
|
||||
$fallback_sizes = apply_filters( 'fallback_intermediate_image_sizes', $fallback_sizes, $metadata );
|
||||
|
||||
$sizes = array();
|
||||
$_wp_additional_image_sizes = wp_get_additional_image_sizes();
|
||||
|
||||
foreach ( $fallback_sizes as $s ) {
|
||||
if ( isset( $_wp_additional_image_sizes[ $s ]['width'] ) ) {
|
||||
$sizes[ $s ]['width'] = intval( $_wp_additional_image_sizes[ $s ]['width'] );
|
||||
} else {
|
||||
$sizes[ $s ]['width'] = get_option( "{$s}_size_w" );
|
||||
$sizes[ $s ]['height'] = get_option( "{$s}_size_h" );
|
||||
}
|
||||
|
||||
if ( isset( $_wp_additional_image_sizes[ $s ]['height'] ) ) {
|
||||
$sizes[ $s ]['height'] = intval( $_wp_additional_image_sizes[ $s ]['height'] );
|
||||
} else {
|
||||
$sizes[ $s ]['height'] = get_option( "{$s}_size_h" );
|
||||
}
|
||||
|
||||
if ( isset( $_wp_additional_image_sizes[ $s ]['crop'] ) ) {
|
||||
$sizes[ $s ]['crop'] = $_wp_additional_image_sizes[ $s ]['crop'];
|
||||
} else {
|
||||
// Force thumbnails to be soft crops.
|
||||
if ( ! 'thumbnail' === $s ) {
|
||||
$sizes[ $s ]['crop'] = get_option( "{$s}_crop" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Only load PDFs in an image editor if we're processing sizes.
|
||||
if ( ! empty( $sizes ) ) {
|
||||
|
@ -404,4 +404,49 @@ class Tests_Image_Functions extends WP_UnitTestCase {
|
||||
|
||||
unlink( $test_file );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 39231
|
||||
*/
|
||||
public function test_fallback_intermediate_image_sizes() {
|
||||
if ( ! wp_image_editor_supports( array( 'mime_type' => 'application/pdf' ) ) ) {
|
||||
$this->markTestSkipped( 'Rendering PDFs is not supported on this system.' );
|
||||
}
|
||||
|
||||
$orig_file = DIR_TESTDATA . '/images/wordpress-gsoc-flyer.pdf';
|
||||
$test_file = '/tmp/wordpress-gsoc-flyer.pdf';
|
||||
copy( $orig_file, $test_file );
|
||||
|
||||
$attachment_id = $this->factory->attachment->create_object( $test_file, 0, array(
|
||||
'post_mime_type' => 'application/pdf',
|
||||
) );
|
||||
|
||||
$this->assertNotEmpty( $attachment_id );
|
||||
|
||||
add_image_size( 'test-size', 100, 100 );
|
||||
add_filter( 'fallback_intermediate_image_sizes', array( $this, 'filter_fallback_intermediate_image_sizes' ), 10, 2 );
|
||||
|
||||
$expected = array(
|
||||
'file' => 'wordpress-gsoc-flyer-77x100.jpg',
|
||||
'width' => 77,
|
||||
'height' => 100,
|
||||
'mime-type' => 'image/jpeg',
|
||||
);
|
||||
|
||||
$metadata = wp_generate_attachment_metadata( $attachment_id, $test_file );
|
||||
$this->assertTrue( isset( $metadata['sizes']['test-size'] ), 'The `test-size` was not added to the metadata.' );
|
||||
$this->assertSame( $metadata['sizes']['test-size'], $expected );
|
||||
|
||||
remove_image_size( 'test-size' );
|
||||
remove_filter( 'fallback_intermediate_image_sizes', array( $this, 'filter_fallback_intermediate_image_sizes' ), 10 );
|
||||
|
||||
unlink( $test_file );
|
||||
}
|
||||
|
||||
function filter_fallback_intermediate_image_sizes( $fallback_sizes, $metadata ) {
|
||||
// Add the 'test-size' to the list of fallback sizes.
|
||||
$fallback_sizes[] = 'test-size';
|
||||
|
||||
return $fallback_sizes;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user