Задача. Необходимо разрешить WordPress загружать svg-файлы в медиаменеджер, чтобы можно было добавить логотипы и иконки. По умолчанию svg-файл не разрешен из соображений безопасности.
Решение 1. Можно воспользоваться готовым плагином из репозитория WordPress. Самые популярные — «SVG Support» и «Safe SVG».
Решение 2. Чтобы в WordPress разрешить загрузку SVG-файлов вставить Код №1 в файл functions.php
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
/* Добавить SVG в список разрешенных для загрузки файлов */ add_filter( 'upload_mimes', 'svg_upload_allow' ); function svg_upload_allow( $mimes ) { $mimes['svg'] = 'image/svg+xml'; return $mimes; } add_filter( 'wp_check_filetype_and_ext', 'fix_svg_mime_type', 10, 5 ); # Исправление MIME типа для SVG файлов. function 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) ) ); } // mime тип был обнулен, поправим его // а также проверим право пользователя 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; } // end |
А чтобы включить отображение SVG в медиабиблиотеке используем Код №2, иначе они просто будут отображаться как файлы-документы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
add_filter( 'wp_prepare_attachment_for_js', 'show_svg_in_media_library' ); /* Формирование данных для отображения SVG как изображения */ function show_svg_in_media_library( $response ) { if ( $response['mime'] === 'image/svg+xml' ) { // Вывод названия файла $response['image'] = [ 'src' => $response['url'], ]; } return $response; } |