如何通过过滤器统一修改WooCommerce可下载产品显示文件名
完全可以实现
你找到的woocommerce_downloadable_product_name过滤器正是专门用来修改前端显示的下载名称的,不会改动产品后台实际存储的文件名字段,也不需要修改任何插件或WooCommerce核心代码。
实现代码
将以下代码添加到你的主题functions.php文件或自定义功能插件中即可:
add_filter( 'woocommerce_downloadable_product_name', 'custom_unified_download_name', 10, 4 ); function custom_unified_download_name( $download_name, $_product, $download_id, $file_number ) { // 替换成你想要统一显示的文字,比如“免费下载” return '免费下载'; }
额外扩展(可选)
如果需要针对特定场景(比如特定产品分类、用户角色)修改名称,可在函数内添加判断逻辑:
add_filter( 'woocommerce_downloadable_product_name', 'custom_conditional_download_name', 10, 4 ); function custom_conditional_download_name( $download_name, $_product, $download_id, $file_number ) { // 示例:仅对“免费资源”分类下的产品修改名称 if ( has_term( '免费资源', 'product_cat', $_product->get_id() ) ) { return '免费下载'; } // 其他产品保留原显示名称 return $download_name; }
原理说明
从你提供的WooCommerce核心代码可以看到:
- 实际存储的文件名字段是
$download_file['name'],这个值并没有被过滤器修改 - 过滤器仅修改了
$download_name变量,而前端(包括WooCommerce用户面板、调用该字段的插件)都是使用$downloads数组中的download_name值来显示按钮文字,因此完全不会影响后台的产品文件设置。
内容的提问来源于stack exchange,提问作者Monoor
相关产品推荐
相关产品推荐

