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

WooCommerce样品站:价格为空时显示加入购物车按钮及数量字段

解决WooCommerce价格为空时显示加入购物车按钮及数量字段的方案

我完全懂你的需求——搭建一个只提供免费样品的WooCommerce站点,不想每次编辑产品都手动输入0价格,就想让价格字段空着的时候,自动显示数量选择器和加入购物车按钮,同时不用显示价格(毕竟是免费样品)。下面给你两个可行方案,优先推荐第一个直接改前端逻辑的方案:

优先方案:修改价格为空时的前端显示逻辑

WooCommerce默认会在价格为空时隐藏加购相关元素,我们可以通过几个钩子来覆盖这个判断,让系统把"空价格"当成"免费(0元)"处理,同时隐藏价格显示,直接上代码:

// 让空价格的产品变为可购买状态,触发加购按钮显示
add_filter( 'woocommerce_is_purchasable', 'make_empty_price_purchasable', 10, 2 );
function make_empty_price_purchasable( $purchasable, $product ) {
    if ( '' === $product->get_price() ) {
        $purchasable = true;
    }
    return $purchasable;
}

// 强制显示数量输入框(针对简单产品),还能限制领取数量
add_filter( 'woocommerce_quantity_input_args', 'show_quantity_input_for_empty_price', 10, 2 );
function show_quantity_input_for_empty_price( $args, $product ) {
    if ( '' === $product->get_price() ) {
        $args['min_value'] = 1;    // 最少领1份
        $args['max_value'] = 5;    // 最多领5份,可按需调整
        $args['input_value'] = 1;  // 默认选中1份
    }
    return $args;
}

// 隐藏默认价格显示,换成自定义的免费样品提示
add_action( 'woocommerce_single_product_summary', 'hide_price_for_empty_price_products', 1 );
function hide_price_for_empty_price_products() {
    global $product;
    if ( '' === $product->get_price() ) {
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
        echo '<p class="free-sample-notice" style="color: #2ecc71; font-weight: bold;">✅ 免费样品,无需付费</p>';
    }
}

// 后台自动将空价格转为0,确保购物车/结算流程无异常
add_filter( 'woocommerce_product_get_price', 'set_empty_price_to_zero', 10, 2 );
function set_empty_price_to_zero( $price, $product ) {
    if ( '' === $price ) {
        $price = 0;
    }
    return $price;
}

代码说明:

  • 第一个钩子woocommerce_is_purchasable:告诉WooCommerce"空价格的产品是可以购买的",这样加购按钮就会显示出来
  • 第二个钩子woocommerce_quantity_input_args:强制显示数量输入框,还能限制用户最多领多少份样品,避免过度申请
  • 第三个钩子:把默认的价格模块去掉,换成更友好的免费提示文本,样式可以自己调整
  • 第四个钩子:在后台把空价格转换成0,确保购物车和结算环节不会出现价格异常

替代方案:后台自动给空价格产品填充0价格

如果你不想改前端逻辑,也可以让系统在你保存产品时,自动把空的价格和常规价格设为0,这样就利用WooCommerce原生的0价格显示逻辑,效果和手动输入0一样:

// 保存产品时自动将空价格设置为0
add_action( 'woocommerce_admin_process_product_object', 'auto_set_empty_price_to_zero' );
function auto_set_empty_price_to_zero( $product ) {
    if ( '' === $product->get_price() ) {
        $product->set_price( 0 );
        $product->set_regular_price( 0 );
    }
}

注意事项:

  • 代码建议放在子主题的functions.php里,或者用Code Snippets这类自定义代码插件,别直接改父主题,不然主题更新会丢代码
  • 如果你的样品是可变产品(比如有不同规格),需要调整代码针对每个变体处理,有需求的话可以再问我
  • 所有参数都可以按需修改,比如数量限制、提示文本的样式和内容,完全适配你的站点风格

内容的提问来源于stack exchange,提问作者Jonathan Ryan Patterson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:45:03