diff --git a/src/wp-includes/customize/class-wp-customize-media-control.php b/src/wp-includes/customize/class-wp-customize-media-control.php index af137512c41f3..40d644ca84e5e 100644 --- a/src/wp-includes/customize/class-wp-customize-media-control.php +++ b/src/wp-includes/customize/class-wp-customize-media-control.php @@ -92,8 +92,9 @@ public function to_json() { * Fake an attachment model - needs all fields used by template. * Note that the default value must be a URL, NOT an attachment ID. */ - $ext = substr( $this->setting->default, -3 ); - $type = in_array( $ext, array( 'jpg', 'png', 'gif', 'bmp', 'webp', 'avif' ), true ) ? 'image' : 'document'; + $ext = wp_check_filetype( $this->setting->default )['ext']; + $ext_types = wp_get_ext_types(); + $type = isset( $ext_types['image'] ) && in_array( $ext, $ext_types['image'], true ) ? 'image' : 'document'; $default_attachment = array( 'id' => 1, diff --git a/tests/phpunit/tests/customize/media-control.php b/tests/phpunit/tests/customize/media-control.php new file mode 100644 index 0000000000000..3a2056f96baa6 --- /dev/null +++ b/tests/phpunit/tests/customize/media-control.php @@ -0,0 +1,63 @@ +add_setting( + 'some_jpg', + array( + 'default' => 'https://example.com/image.jpg', + ) + ); + $manager->add_setting( + 'some_avif', + array( + 'default' => 'https://example.com/image.avif', + ) + ); + $manager->add_setting( + 'some_pdf', + array( + 'default' => 'https://example.com/image.pdf', + ) + ); + $manager->add_setting( 'no_default' ); + + $some_jpg_control = $manager->add_control( new WP_Customize_Media_Control( $manager, 'some_jpg' ) ); + $some_avif_control = $manager->add_control( new WP_Customize_Media_Control( $manager, 'some_avif' ) ); + $some_pdf_control = $manager->add_control( new WP_Customize_Media_Control( $manager, 'some_pdf' ) ); + $no_default_control = $manager->add_control( new WP_Customize_Media_Control( $manager, 'no_default' ) ); + + $some_jpg_control_json = $some_jpg_control->json(); + $some_avif_control_json = $some_avif_control->json(); + $some_pdf_control_json = $some_pdf_control->json(); + + $this->assertSame( 'image', $some_jpg_control_json['defaultAttachment']['type'] ); + $this->assertSame( 'image', $some_avif_control_json['defaultAttachment']['type'] ); + $this->assertSame( 'document', $some_pdf_control_json['defaultAttachment']['type'] ); + $this->assertArrayNotHasKey( 'defaultAttachment', $no_default_control->json() ); + } +}