修正 WordPress 在上传 MP4 文件时的 MIME 类型识别错误

VFX大学 wordpress开发 修正 WordPress 在上传 MP4 文件时的 MIME 类型识别错误

正在查看 1 条回复
  • 作者
    帖子
    • #408

      追光
      管理员

      这段代码的作用是:修正 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 控制允许上传文件类型的钩子。

      • 这段代码确保 .mp4application/mp4 类型都被允许上传。

      • 修复 CDN、对象存储等返回错误类型导致上传失败的问题。


      ✅ 推荐用途场景

      使用场景

      说明

      使用 MP4 作为视频媒体上传

      确保上传无报错,媒体库正常识别

      使用 COS/OSS 等对象存储

      防止误识别 MIME 导致上传失败

      构建视频站点、在线课程等

      保证用户上传视频体验一致、兼容性强

      Gutenberg 视频块插入

      防止 MP4 被过滤或显示为“非视频格式”


      ✅ 使用方式

      将上述代码添加到你的主题的 functions.php 或功能插件中即可:

      // 主题 functions.php 中
      // 或单独放入 custom-mime-fix.php 等自定义插件

      ✅ 总结

      这段代码是一个小而实用的补丁,解决了 WordPress 上传 .mp4 文件在某些环境下类型不兼容的问题,尤其适用于:

      • 视频教学平台

      • 媒体库管理工具

      • 对象存储集成站点

    • #412

      追光
      管理员

      这段代码的作用是:

      阻止 WordPress 从 MP3 文件中自动提取封面图。


      📌 原因和用途:

      • 上传 MP3 时,WordPress 会读取里面的封面图作为缩略图

      • 这段代码可以阻止这个行为,避免自动生成图片

      • 有助于节省空间、加快上传速度、保持媒体干净


      ✅ 适合:

      • 音频类网站(播客、音乐库)

      • 不需要封面图的上传系统

      • 用对象存储或CDN同步的场景


      🧩 用法:

      把这段代码放进主题的 functions.php 即可:

      add_filter('wp_read_audio_metadata', function($metadata, $file) {
          if (isset($metadata['image'])) {
              unset($metadata['image']); // 移除自动提取的封面图
          }
          return $metadata;
      }, 10, 2);
正在查看 1 条回复
  • 在下方一键注册,登录后就可以回复啦。