Как разрешить загрузку svg в WordPress


Пока 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)