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

如何判断WooCommerce捆绑产品是否包含可选捆绑商品?

WooCommerce捆绑产品判断可选商品并替换输出为添加按钮

需求说明

需要检查WooCommerce产品页面是否为捆绑产品,若为捆绑产品则判断是否存在至少一个可选捆绑商品:

  • 存在可选商品时设置$hasqty = 1
  • 不存在时设置$hasqty = 0
  • 最终将测试用的输出文本替换为添加到购物车按钮

最初代码的问题

最初的实现存在几个关键错误:

  • 变量名不一致:定义了$bundleditems但循环里用了$bundled_items,导致循环无法执行
  • is_optional()方法传参错误:插件源码里该方法无参数,直接返回'yes' === $this->optional
  • 循环逻辑错误:每次循环都会覆盖$hasqty的值,无法正确统计是否存在至少一个可选商品

修正后的基础判断代码

调整后的代码已能正确判断是否存在可选捆绑商品:

add_action( 'woocommerce_before_add_to_cart_form', 'ino_qty_main_function' );

function ino_qty_main_function() {
    global $product;
    if ( $product->is_type('bundle') ) {
        $hasqty = 0;
        $bundleditems = $product->get_bundled_items();
        foreach ( $bundleditems as $bundleditem ) {
            // is_optional方法无需传参,直接调用
            if ( $bundleditem->is_optional() ) {
                $hasqty = 1; // 只要有一个可选商品就设为1,无需累加
                break; // 找到一个后直接跳出循环,提升效率
            }
        }
        // 原测试输出
        echo "<h2> final hasqty" . $hasqty . "</h2>";
    }
}

注:这里把$hasqty++改为直接赋值1并跳出循环,因为我们只需要判断是否至少存在一个可选商品,不需要统计数量,这样更高效。

替换测试输出为添加按钮

将测试输出替换为自定义添加按钮(或调用WooCommerce默认添加按钮),以下是完整代码:

add_action( 'woocommerce_before_add_to_cart_form', 'ino_qty_main_function' );

function ino_qty_main_function() {
    global $product;
    if ( $product->is_type('bundle') ) {
        $hasqty = 0;
        $bundleditems = $product->get_bundled_items();
        foreach ( $bundleditems as $bundleditem ) {
            if ( $bundleditem->is_optional() ) {
                $hasqty = 1;
                break;
            }
        }

        // 替换测试输出为添加按钮
        if ( $hasqty === 1 ) {
            // 有可选商品时显示的自定义按钮
            echo '<button type="submit" class="single_add_to_cart_button button alt">添加可选套餐到购物车</button>';
        } else {
            // 无可选商品时调用默认添加按钮
            do_action( 'woocommerce_single_add_to_cart_button' );
            // 也可以替换为自定义按钮:
            // echo '<button type="submit" class="single_add_to_cart_button button alt">添加套餐到购物车</button>';
        }
    }
}

说明:如果需要完全替换默认的添加到购物车表单,可先通过remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );移除默认按钮,避免重复显示。

内容的提问来源于stack exchange,提问作者Ino Ingvar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:47:02