You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WooCommerce/WordPress中保留可下载音频文件名的空格

WooCommerce可下载音频保留原始带空格文件名解决方案

代码放置位置

将以下代码添加到当前激活主题的functions.php文件末尾,或添加到自定义代码片段插件中(更推荐,可避免主题更新后代码被覆盖,修改错误也不会直接导致网站崩溃)。

实现代码

// 下载时输出带空格的原始音频文件名
add_filter( 'woocommerce_download_file_name', 'custom_restore_original_audio_filename', 10, 4 );
function custom_restore_original_audio_filename( $filename, $download_id, $product, $download ) {
    // 获取当前下载文件对应的媒体附件ID
    $attachment_id = $download->get_id();
    if ( empty($attachment_id) ) {
        return $filename;
    }
    // 读取媒体附件的原始标题(上传时默认保存的是带空格的原始文件名)
    $original_title = get_the_title( $attachment_id );
    if ( empty($original_title) ) {
        return $filename;
    }
    // 保留原文件后缀名
    $file_extension = pathinfo( $filename, PATHINFO_EXTENSION );
    // 如不需要对文件名做任何安全过滤直接保留所有空格,可将下一行替换为 $new_filename = $original_title . '.' . $file_extension;
    $new_filename = sanitize_file_name( $original_title ) . '.' . $file_extension;
    
    return $new_filename;
}

// 可选:关闭WordPress上传时自动替换文件名空格为连字符的逻辑,从源头保留原始文件名
add_filter( 'sanitize_file_name_chars', 'custom_allow_space_in_audio_filename', 10, 1 );
function custom_allow_space_in_audio_filename( $special_chars ) {
    // 从非法字符列表中移除空格
    return array_diff( $special_chars, array( ' ' ) );
}

逻辑说明

  • 主逻辑通过WooCommerce官方提供的woocommerce_download_file_name钩子实现,触发下载时会自动关联对应产品、下载文件的信息,无需手动匹配产品ID,所有可下载产品都会生效。
  • 代码默认读取媒体附件的标题作为输出文件名,你可以在媒体库中单独修改每个音频附件的标题,自定义下载输出的文件名。
  • 可选钩子仅在需要媒体库存储的文件本身就保留空格时使用,如果仅需要用户下载时看到带空格的文件名、服务器存储的文件仍用连字符分隔,不需要添加这段代码。

注意事项

  • 若不使用可选的上传过滤代码,上传音频后请检查媒体库中对应附件的标题,确保和你想要输出的原始文件名一致。
  • 如需要仅对特定产品的下载文件名做修改,可在主函数中添加产品ID判断逻辑,示例:
    // 仅对ID为123、456的产品生效
    if ( !in_array( $product->get_id(), array(123,456) ) ) {
        return $filename;
    }
    

内容的提问来源于stack exchange,提问作者Mac Dalland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:09:05