这段代码的作用是:修正 WordPress 在上传 MP4 文件时的 MIME 类型识别错误,确保 MP4 视频文件可以被正确上传、识别和播放,尤其在一些使用对象存储(如腾讯 COS)或某些浏览器环境下出现类型识别问题时特别有用。
✅ 背景说明
在 WordPress 中,上传文件时会校验其 扩展名(ext)和 MIME 类型(type)。但在以下场景中可能会识别错误,导致上传失败或媒体库无法识别为视频:
-
MP4 文件上传后被识别为 application/mp4 而非 video/mp4
-
使用腾讯 COS、阿里 OSS、七牛云等对象存储返回的 Content-Type 异常
-
有些压缩过的 MP4 或未严格符合 MP4 标准的文件识别失败
✅ 代码详解与用途
1. 修正上传时的 MIME 类型判断
add_filter('wp_check_filetype_and_ext', function($data, $file, $filename, $mimes) {
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if ($ext === 'mp4') {
$data['ext'] = 'mp4'; // 强制设定扩展名
$data['type'] = 'video/mp4'; // 设置 MIME 类型为标准 MP4 视频
}
return $data;
}, 10, 4);
🔧 说明:
-
wp_check_filetype_and_ext 是 WordPress 核心用来校验上传文件类型的过滤器。
-
这段代码强制将 .mp4 文件的 MIME 类型设为 video/mp4,避免 WordPress 拒绝处理它。
-
解决“文件类型不被允许”或“显示错误”的常见问题。
2. 扩展允许的 MIME 类型
add_filter('mime_types', function($mimes) {
$mimes['mp4'] = 'video/mp4'; // 显式允许 .mp4 文件
$mimes['application/mp4'] = 'video/mp4'; // 修复某些服务错误返回的类型
return $mimes;
});
🔧 说明:
-
mime_types 是 WordPress 控制允许上传文件类型的钩子。
-
这段代码确保 .mp4 和 application/mp4 类型都被允许上传。
-
修复 CDN、对象存储等返回错误类型导致上传失败的问题。
✅ 推荐用途场景
使用场景
|
说明
|
使用 MP4 作为视频媒体上传
|
确保上传无报错,媒体库正常识别
|
使用 COS/OSS 等对象存储
|
防止误识别 MIME 导致上传失败
|
构建视频站点、在线课程等
|
保证用户上传视频体验一致、兼容性强
|
Gutenberg 视频块插入
|
防止 MP4 被过滤或显示为“非视频格式”
|
✅ 使用方式
将上述代码添加到你的主题的 functions.php 或功能插件中即可:
// 主题 functions.php 中
// 或单独放入 custom-mime-fix.php 等自定义插件
✅ 总结
这段代码是一个小而实用的补丁,解决了 WordPress 上传 .mp4 文件在某些环境下类型不兼容的问题,尤其适用于: