请注意,自WP 5.0.1以来,mime类型检查更加严格,其中文件内容和文件扩展名必须匹配。参见例如最近的question 在vtt
文件类型。
给定文件扩展名的次要mime类型这里有一个建议,如何支持给定文件扩展名的次要mime类型。让我们采取行动.vtt
例如。core假定mime类型为text/vtt
对于该文件扩展名,但真正的mime类型来自finfo_file()
有时可能是text/plain
. 这个finfo_file()
似乎有点buggy. 我们可以将其作为辅助mime类型添加支持,包括:
/**
* Support for \'text/plain\' as the secondary mime type of .vtt files,
* in addition to the default \'text/vtt\' support.
*/
add_filter( \'wp_check_filetype_and_ext\', \'wpse323750_secondary_mime\', 99, 4 );
function wpse323750_secondary_mime( $check, $file, $filename, $mimes ) {
if ( empty( $check[\'ext\'] ) && empty( $check[\'type\'] ) ) {
// Adjust to your needs!
$secondary_mime = [ \'vtt\' => \'text/plain\' ];
// Run another check, but only for our secondary mime and not on core mime types.
remove_filter( \'wp_check_filetype_and_ext\', \'wpse323750_secondary_mime\', 99, 4 );
$check = wp_check_filetype_and_ext( $file, $filename, $secondary_mime );
add_filter( \'wp_check_filetype_and_ext\', \'wpse323750_secondary_mime\', 99, 4 );
}
return $check;
}
这里我们使用
wp_check_filetype_and_ext
筛选以查看检查是否失败。那样的话我们就跑
wp_check_filetype_and_ext()
同样,但现在只在我们的二级mime类型上,同时禁用我们的过滤器回调以避免无限循环。
如果我们需要为.vtt
文件,然后我们可以使用以下内容展开上述代码段:
/**
* Demo: Support for \'text/foo\' and \'text/bar\' mime types of .vtt files,
* in addition to the default \'text/vtt\' support.
*/
add_filter( \'wp_check_filetype_and_ext\', \'wpse323750_multi_mimes\', 99, 4 );
function wpse323750_multi_mimes( $check, $file, $filename, $mimes ) {
if ( empty( $check[\'ext\'] ) && empty( $check[\'type\'] ) ) {
// Adjust to your needs!
$multi_mimes = [ [ \'vtt\' => \'text/foo\' ], [ \'vtt\' => \'text/bar\' ] ];
// Run new checks for our custom mime types and not on core mime types.
foreach( $multi_mimes as $mime ) {
remove_filter( \'wp_check_filetype_and_ext\', \'wpse323750_multi_mimes\', 99, 4 );
$check = wp_check_filetype_and_ext( $file, $filename, $mime );
add_filter( \'wp_check_filetype_and_ext\', \'wpse323750_multi_mimes\', 99, 4 );
if ( ! empty( $check[\'ext\'] ) || ! empty( $check[\'type\'] ) ) {
return $check;
}
}
}
return $check;
}
我希望您可以进一步测试它,并根据您的需要进行调整。