“Upload_MIMES”筛选器不起作用。需要允许WOFF和WOFF2

时间:2019-05-23 作者:Chris J. Zähller

我正在处理主题设置页面,我需要允许上载WOFFWOFF2 文件。获取

抱歉,出于安全原因,不允许使用此文件类型。

此时的消息。

我的代码:

  function my_mime_types($mimes = array()) {
    // $mimes[\'svg\']   = \'image/svg+xml\'; // insecure; do not use!
    // Try https://wordpress.org/plugins/safe-svg/ if you need to upload SVGs
    $mimes[\'webp\']  = \'image/webp\';
    $mimes[\'ogg\']   = \'audio/ogg\';
    $mimes[\'woff\']  = \'font/woff\';
    $mimes[\'woff2\'] = \'font/woff2\';
    return $mimes;
  }

  add_filter( \'upload_mimes\', \'my_mime_types\' );
我跑了file --mime-type -b /path/to/fonts/font.woff, 返回的application/octet-stream 所以我更新了代码,但仍然没有成功。我也试过了application/x-font-woff 未成功。

我还得到了一个错误.webp 文件mime类型匹配;运行确认mime-type.

我知道最新的Wordpress版本采用了严格的mime类型检查。这可能是罪魁祸首吗?有什么解决办法吗?

更新:工作代码基于Ratan Maurya的回答:

add_filter( \'wp_check_filetype_and_ext\', \'my_file_and_ext_webp\', 10, 4 );
function my_file_and_ext_webp( $types, $file, $filename, $mimes ) {
    if ( false !== strpos( $filename, \'.webp\' ) ) {
        $types[\'ext\']  = \'webp\';
        $types[\'type\'] = \'image/webp\';
    }
    if ( false !== strpos( $filename, \'.ogg\' ) ) {
        $types[\'ext\']  = \'ogg\';
        $types[\'type\'] = \'audio/ogg\';
    }
    if ( false !== strpos( $filename, \'.woff\' ) ) {
        $types[\'ext\']  = \'woff\';
        $types[\'type\'] = \'font/woff|application/font-woff|application/x-font-woff|application/octet-stream\';
    }
    if ( false !== strpos( $filename, \'.woff2\' ) ) {
        $types[\'ext\']  = \'woff2\';
        $types[\'type\'] = \'font/woff2|application/octet-stream|font/x-woff2\';
    }

    return $types;
}

function my_mime_types($mimes) {
  // $mimes[\'svg\']   = \'image/svg+xml\'; // insecure; do not use! Try https://wordpress.org/plugins/safe-svg/ if you need to upload SVGs
  $mimes[\'webp\']  = \'image/webp\';
  $mimes[\'ogg\']   = \'audio/ogg\';
  $mimes[\'woff\']  = \'font/woff|application/font-woff|application/x-font-woff|application/octet-stream\';
  $mimes[\'woff2\'] = \'font/woff2|application/octet-stream|font/x-woff2\';
  return $mimes;
}

add_filter( \'upload_mimes\', \'my_mime_types\' );

1 个回复
最合适的回答,由SO网友:Ram Ratan Maurya 整理而成

我在以下位置看到了正确的实现https://wordpress.stackexchange.com/a/323226/24756. 从技术上讲,您需要将扩展传递到过滤器wp_check_filetype_and_ext

对于WOFF/WOFF2,我建议使用以下格式:

$mimes[\'woff\']  = \'font/woff|application/font-woff|application/x-font-woff|application/octet-stream\';
$mimes[\'woff2\'] = \'font/woff2|application/octet-stream|font/x-woff2\';
对于.webp, 它可以是image/webp.

希望有帮助。

相关推荐

Custom CSS In Uploads Folder

我想知道上传文件夹中是否有自定义CSS文件。我从以前的开发人员那里继承了一个自定义主题,前端的大量样式都是从这个样式表派生出来的,它同样不在主题或插件文件夹中,而是wp-content/uploads 文件夹我正在努力找出它是如何推导出来的,但它确实存在。这是否被视为不良做法,或者是否有这样的用例?我相信之前的开发人员提到了Visual Composer或JS Composer以及编译更少的文件。。。但我对此不确定,他已经失去了联系,我想知道为什么我们要以这种方式使用样式表,因此这个问题是关于最佳实践的,