自最新的WP更新以来未上载SVG文件

时间:2017-01-11 作者:pjk_ok

我的函数PHP文件中有一个片段,允许我上载SVG文件。由于今天升级到最新版本的WP,我无法再上传SVG。我还尝试了CSS技巧网站上的第二个代码片段,但也没有成功。

是否有人知道a)上次更新可能导致这种情况的原因,以及b)是否有人知道解决方法。

以下是我通常使用的代码:

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

保罗。

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

在WordPress 4.7.1中a change was introduced 检查上传文件的真正mime类型。这打破了SVG或DOCX等文件类型的上传。WordPress Core中已经存在此问题的票证,您可以在其中阅读更多信息:

某些非图像文件在4.7.1之后无法上载(https://core.trac.wordpress.org/ticket/39550)https://core.trac.wordpress.org/ticket/39552)Atemporary 建议的解决方法(在解决此问题之前)是以下插件:
Disable Real MIME Check

如果您不想使用该插件,以下是相同的功能:

add_filter( \'wp_check_filetype_and_ext\', function($data, $file, $filename, $mimes) {
    global $wp_version;

    if ( \'4.7.2\' !== $wp_version ) {
       return $data;
    }

    $filetype = wp_check_filetype( $filename, $mimes );

    return [
        \'ext\'             => $filetype[\'ext\'],
        \'type\'            => $filetype[\'type\'],
        \'proper_filename\' => $data[\'proper_filename\']
    ];

}, 10, 4 );
请注意,这个被剪断的版本包含了一个版本检查,以便在WordPress更新后立即禁用修复。

Edit

该问题最初设置为在4.7.2中修复。但是自从4.7.2 was an urgent security release, 修复程序没有进入该版本。现在应该在4.7.3中修复。

SO网友:Mark Kaplun

看来这可能和这张票有关https://core.trac.wordpress.org/ticket/39552, 看起来有什么东西在4.7.1中被破坏了

SO网友:MrMesees

似乎没有人只是在做什么,这太糟糕了,所以我是这样处理的。。。

历史/背景

2015年,我根据一篇CSS技巧文章创建了一个SVG上传程序,该文章介绍了SVG的内容。我还为图像预览进行了网格工作,并使用了一些其他修复。简单插件(IMO文件类型插件应该很简单)

解决方案4.7有一些变化。真正的PITA是image/ mime类型WP现在在图像上使用GD。为了绕过此问题,我设置svg 要使用的扩展application/svg+xml 这样GD就不会弄乱文件。

Update: 从4.7.2开始,在某些情况下,一些明亮的火花也打破了这一点

然后我们通过hook将其连接回image/svg+xml. 这与其他答案中使用的方法相同,但我们首先将其锁定到我们的特定案例中以消除影响(它是SVG文件);我们可以依靠阅读$data[\'ext\'] (应该比只通过一次比较和一次数组/哈希访问获取文件信息的函数便宜)。

Update: 截至4.7.2$data[\'ext\'] 不总是设置,所以我们现在如果它的长度是<;1使用从文件名中提取(可能不安全)扩展名strtolower(end(explode(\'.\', $filename))). 我真正反对使用FileInfo的原因是,本质上依赖PHP扩展太不透明了,不可能总是对所有人都有效(尤其是那些没有权限或没有权限进行编译的人,如果没有扩展的话)。我想要一些能代替分机的东西。这不再是拥有正确信息的问题,因此对于那些相信FileInfo 并且有了扩展(我认为这是5.6+中的默认值),它应该可以工作。此外,因为这是一个插件,所以它不会修改核心。您可以关闭此代码或注销挂钩。

https://github.com/Lewiscowles1986/WordPressSVGPlugin

看见

相关推荐

如何实现我自己的图标而不是使用SVG图标系统

在WordPress 4.9.2中,我为2017年创建了一个儿童主题。我注意到它在页面底部带有自己的SVG图标系统,用于社交媒体图标。我看到一些代码是在site-info.php 文件,在wp_nav_menu().<nav class=\"social-navigation\" role=\"navigation\" aria-label=\"<?php esc_attr_e( \'Footer Social Links Menu\', \'twentyseventeen\' ); ?>