如何在WordPress 4.9.8中上传SVG?

时间:2018-09-12 作者:Sarath

我在安装了不同的插件后尝试了上传。甚至在函数中添加了过滤器。php文件。

    function add_svg_to_upload_mimes( $upload_mimes ) { 
    $upload_mimes[\'svg\'] = \'image/svg+xml\'; 
    $upload_mimes[\'svgz\'] = \'image/svg+xml\'; 
    return $upload_mimes; 
    } 
    add_filter( \'upload_mimes\', \'add_svg_to_upload_mimes\', 10, 1 );
但是仍然上载SVG会导致以下错误。SVG upload error

6 个回复
最合适的回答,由SO网友:Tedinoz 整理而成

这个问题让我挠头。是的,为什么WordPress在本地不支持这个?然后我发现了。

您询问了如何在WordPress 4.9.8(撰写本文时的当前版本)中上载SVG。您提到您“在安装了不同的插件后尝试了上载”。您不会说哪些插件,也不会说它们是否与SVG相关。

据我所知,目前最安全、最合适的答案是SVF Safe 达雷尔·道尔(Darrell Doyle)的一个插件。如果这个插件不适合你,那么我建议你在其他地方有冲突,你应该按照通常的程序来解决。就个人而言,如果这个插件对我不起作用,那么我会放弃上传SVG的想法。

如果您还没有这样做,我建议您阅读“SVG Uploads in WordPress - the inconvenient truth“Bjorn Johansen和/或”How to Safely Enable WordPress SVG Support - 2 Simple Clicks“布莱恩·杰克逊(BrianJackson)。至少你应该知道你是为了什么而加入的。

SO网友:Syed Figar Ali Jaffri

@rana umer您的代码是正确的,只需删除“image/svg”后面的“+xml”。

//add SVG to allowed file uploads
function add_file_types_to_uploads($file_types){

     $new_filetypes = array();
     $new_filetypes[\'svg\'] = \'image/svg\';
     $file_types = array_merge($file_types, $new_filetypes );

     return $file_types; 
} 
add_action(\'upload_mimes\', \'add_file_types_to_uploads\');

SO网友:Rana umer
//add SVG to allowed file uploads
function add_file_types_to_uploads($file_types){

    $new_filetypes = array();
    $new_filetypes[\'svg\'] = \'image/svg+xml\';
    $file_types = array_merge($file_types, $new_filetypes );

    return $file_types;
}
add_action(\'upload_mimes\', \'add_file_types_to_uploads\');
SO网友:Suraj Rathod

添加后upload_mimes 行动仍然有人面临问题,然后将其添加到您的wp配置中。php文件

define( \'ALLOW_UNFILTERED_UPLOADS\', true );

SO网友:Nuno Sarmento

第一个功能是检查WordPress并在低于4.8的WP版本上添加支持。第二个功能是注册mime文件类型(SVG),最后一个功能是修复媒体库上的缩略图。

 /**
 * Add svg support
 *
 */
add_filter( \'wp_check_filetype_and_ext\', function( $data, $file, $filename, $mimes) {
      global $wp_version;
      if( $wp_version == \'4.7\' || ( (float) $wp_version < 4.7 ) ) {
      return $data;
    }
    $filetype = wp_check_filetype( $filename, $mimes );
      return [
      \'ext\'             => $filetype[\'ext\'],
      \'type\'            => $filetype[\'type\'],
      \'proper_filename\' => $data[\'proper_filename\']
    ];
}, 10, 4 );

function ns_mime_types( $mimes ){
   $mimes[\'svg\'] = \'image/svg+xml\';
   return $mimes;
}
add_filter( \'upload_mimes\', \'ns_mime_types\' );

function ns_fix_svg() {
  echo \'<style type="text/css">.attachment-266x266, .thumbnail img { width: 100% !important; height: auto !important;} </style>\';
}
add_action( \'admin_head\', \'ns_fix_svg\' );

SO网友:Mr.Hosseini

添加此挂钩,我在wp 5.3上测试了它的工作原理:

// Allow SVG
add_filter(\'wp_check_filetype_and_ext\', function ($data, $file, $filename, $mimes) {

    if (!$data[\'type\']) {
        $wp_filetype = wp_check_filetype($filename, $mimes);
        $ext = $wp_filetype[\'ext\'];
        $type = $wp_filetype[\'type\'];
        $proper_filename = $filename;
        if ($type && 0 === strpos($type, \'image/\') && $ext !== \'svg\') {
            $ext = $type = false;
        }
        $data[\'ext\'] = $ext;
        $data[\'type\'] = $type;
        $data[\'proper_filename\'] = $proper_filename;
    }
    return $data;


}, 10, 4);


add_filter(\'upload_mimes\', function ($mimes) {
    $mimes[\'svg\'] = \'image/svg+xml\';
    return $mimes;
});


add_action(\'admin_head\', function () {
    echo \'<style type="text/css">
         .media-icon img[src$=".svg"], img[src$=".svg"].attachment-post-thumbnail {
      width: 100% !important;
      height: auto !important;
    }</style>\';
});

结束