getimagesize_mimes_to_exts
Позволяет добавить MIME тип и соответствующее ему расширение файла-картинки.
Этот фильтр используется в ядре в случаях, когда загружается картинка с расширением отличным от реального MIME типа файла.
Например, у нас есть файл-картинка my-image.jpg
, но реальный формат картинки PNG, т.е. в названии файла ошибка. В этом случае, в ходе проверок, WordPress дойдет до этого хука и из него получит расширение файла по реальному MIME типу файла 'image/png' => 'png'
, а затем заменит это расширение в назывании файла, т.е. в результате на сайт будет загружена картинка с названием my-image.png
.
Этот хук может пригодится когда мы добавляем свои форматы картинок, например webp и нам также нужно предусмотреть что расширение в названии файла может отличаться от реального формата.
Использование
add_filter( 'getimagesize_mimes_to_exts', 'wp_kama_getimagesize_mimes_to_exts_filter' ); /** * Function for `getimagesize_mimes_to_exts` filter-hook. * * @param array $mime_to_ext Array of image mime types and their matching extensions. * * @return array */ function wp_kama_getimagesize_mimes_to_exts_filter( $mime_to_ext ){ // filter... return $mime_to_ext; }
- $mime_to_ext(массив)
Массив MIME типов и соответствующих расширений фалов.
array( 'image/jpeg' => 'jpg', 'image/png' => 'png', 'image/gif' => 'gif', 'image/bmp' => 'bmp', 'image/tiff' => 'tif', )
Примеры
#1 Исправляем расширение .webp формата и разрешаем загрузку.
Допустим мы разрешили загрузку картинок с форматом webp, таким кодом:
add_filter( 'upload_mimes', function( $mimes ){ $mimes['webp'] = 'image/webp'; return $mimes; } );
И теперь пытаемся загрузить скаченную где-то в сети картинку с расширением .png, например img.png, реальный формат которой webp. Картинка в этом случае не загрузится, а мы увидим сообщение что «данный формат запрещен в целях безопасности». Но как так-то? PNG же загружали на сайт 100500 раз. И даже когда выясним что реальный формат webp, - так мы же его разрешили к загрузке. Вся эта ситуация будет походить на какой-то дикий глюк!
Так происходит, потому что в ходе проверок, WP выясняет что указанное расширение файла не соответствует реальному типу файла и пытается найти правильное расширение файла, и провести повторную проверку файла, но не находит его, потому что по дефолту его нет и проверка проваливается.
Добавить нужное соответствие можно через этот хук:
add_filter( 'getimagesize_mimes_to_exts', function( $mime_to_ext ){ $mime_to_ext['image/webp'] = 'webp'; return $mime_to_ext; } );
Список изменений
С версии 3.0.0 | Введена. |
Где вызывается хук
$mime_to_ext = apply_filters( 'getimagesize_mimes_to_exts', array( 'image/jpeg' => 'jpg', 'image/png' => 'png', 'image/gif' => 'gif', 'image/bmp' => 'bmp', 'image/tiff' => 'tif', 'image/webp' => 'webp', 'image/avif' => 'avif', ) );