如何在WordPress中允许上传xlsm格式媒体文件?配置代码不生效如何解决?
问题原因及解决方案
- MIME类型校验不匹配:WordPress 4.7.1及以上版本除了检查
upload_mimes注册的类型,还会校验文件实际的MIME类型,你当前只注册了扩展名对应的MIME,没有处理实际文件校验的逻辑,这是最常见的报错原因。 - 代码加载优先级/位置错误:如果你修改的是父主题的
functions.php,父主题更新后代码会被覆盖;如果代码加在了文件末尾的PHP闭合标签?>之后,代码不会生效;如果主题或其他插件也修改了上传MIME列表,优先级不够也会导致你的配置被覆盖。 - 多站点全局配置限制:如果是WordPress多站点模式,网络管理后台的「上传文件类型」全局设置会优先于单站的MIME过滤配置,需要在全局设置里手动添加
xlsm后缀。
完整修复代码
替换你原来添加的代码即可:
// 注册xlsm扩展名对应的MIME类型 function zerodropout_mime_types( $mime_types ) { $mime_types['xlsm'] = 'application/vnd.ms-excel.sheet.macroEnabled.12'; return $mime_types; } // 调整优先级为999,避免被其他配置覆盖 add_filter( 'upload_mimes', 'zerodropout_mime_types', 999, 1 ); // 兼容WordPress实际文件MIME校验逻辑 function zerodropout_check_filetype( $checked, $file, $filename, $mimes ) { $ext = pathinfo( $filename, PATHINFO_EXTENSION ); if ( $ext === 'xlsm' ) { $checked['ext'] = 'xlsm'; $checked['type'] = 'application/vnd.ms-excel.sheet.macroEnabled.12'; $checked['proper_filename'] = $filename; } return $checked; } add_filter( 'wp_check_filetype_and_ext', 'zerodropout_check_filetype', 999, 4 );
内容的提问来源于stack exchange,提问作者Arra
相关产品推荐
相关产品推荐

