问题描述

我在我的函数 PHP 文件中有一个片段,允许我上传 SVG 文件。从今天升级到最新版本的 WP,我无法再上传 svgs 。我也尝试了 CSS 技巧网站的第二个代码片段,也不工作。

有人知道 a) 最后一次更新可能导致了什么,以及 b) 有谁知道一个工作。

这是我通常使用的代码:

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

非常感谢

保罗。

最佳解决方案

在 WordPress 4.7.1 a change was introduced 中,检查上传文件的真实 MIME 类型。这会中断上传文件类型,如 SVG 或 DOCX 。 WordPress Core 中已经存在此问题的门票,您可以在这里阅读更多关于这一点:

临时和推荐的解决方法 (直到此问题被修复的时间) 是以下插件:禁用 Real MIME 检查

如果你不想使用这个插件,这里有同样的功能:

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 更新后立即禁用该修复程序。

编辑

这个问题最初在 4.7.2 中被修正。但是,由于 4.7.2 was an urgent security release,修复没有使它成为该版本。现在应该在 4.7.3 中修复。

次佳解决方案

似乎这样可能与这张票相关的 https://core.trac.wordpress.org/ticket/39552,看起来像在 4.7.1 中被破坏的东西

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。