Пока WordPress в стандартной сборке не позволяет загружать svg изображения через штатный загрузчик медиа, поэтому мы сегодня сделаем код, который будет позволять загружать svg в админке WordPress.
Для этого нам понадобится 3 хука:
upload_mimes, wp_prepare_attachment_for_js и wp_check_filetype_and_ext.
//Добавляем типы файлов для загрузки на сайт
function rb_svg_upload_allow( $mimes ) {
$mimes['svg'] = 'image/svg+xml';
return $mimes;
}
add_filter( 'upload_mimes', 'rb_svg_upload_allow' );
//Создаём данные для отображения SVG в виде изображений в медиатеке
function rb_show_svg_in_media_library( $response ) {
if ( $response['mime'] === 'image/svg+xml' ) {
$response['image'] = [
'src' => $response['url'],
];
}
return $response;
}
add_filter( 'wp_prepare_attachment_for_js', 'rb_show_svg_in_media_library' );
//Исправляем MIME-тип для SVG.
function rb_fix_svg_mime_type( $data, $file, $filename, $mimes, $real_mime = '' ){
// WP 5.1 +
if( version_compare( $GLOBALS['wp_version'], '5.1.0', '>=' ) ) {
$dosvg = in_array( $real_mime, [ 'image/svg', 'image/svg+xml' ] );
}
else {
$dosvg = ( '.svg' === strtolower( substr($filename, -4) ) );
}
if( $dosvg ){
//Разрешаем
if( current_user_can('manage_options') ){
$data['ext'] = 'svg';
$data['type'] = 'image/svg+xml';
}
//Запрещаем
else {
$data['ext'] = $type_and_ext['type'] = false;
}
}
return $data;
}
add_filter( 'wp_check_filetype_and_ext', 'rb_fix_svg_mime_type', 10, 5 );Просто добавляете код в functions.php и можете смело загружать svg)