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

WooCommerce无法检测复选框选中状态,无法添加对应附加商品

问题解决:复选框勾选检测失败,无法添加附加商品到购物车

核心问题分析

你的代码存在几个关键错误,直接导致复选框检测逻辑失效:

  1. 产品ID判断误用赋值运算符:if($id = '147430') 这里使用了赋值操作=而非比较操作==/===,会让这个条件始终为真,干扰后续逻辑执行。
  2. 直接调用全局$_POST存在风险:WooCommerce有自身的请求处理机制,直接依赖$_POST可能无法正确获取表单数据。
  3. 过时的产品ID调用方式:$_product->id在新版WooCommerce中已废弃,需使用get_id()方法获取产品ID。

修复后的完整代码

add_action('woocommerce_add_to_cart', 'custom_add_to_cart');
function custom_add_to_cart() {
    $current_product_id = get_the_ID();
    // 使用全等比较判断当前产品ID
    if($current_product_id === 147430){ 
        $product_id_mes = 147054;
        $product_id_anual = 147295; 
        $found = false;
        
        // 通过WooCommerce请求对象安全获取复选框值
        $checkmes_value = WC()->request->get_post('checkmes');
        if(isset($checkmes_value) && $checkmes_value === 'Si'){
            // 检查购物车中是否已存在目标附加商品
            if ( ! WC()->cart->is_empty() ) {
                foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
                    $_product = $values['data'];
                    // 使用新版方法获取产品ID
                    if ( $_product->get_id() === $product_id_mes ){
                        $found = true;
                        break; // 找到后直接跳出循环,提升效率
                    }
                }
            }
            // 未找到商品则添加至购物车
            if ( ! $found ){
                WC()->cart->add_to_cart( $product_id_mes );
            }
        }
        // 未勾选复选框时不执行添加逻辑
    }
}

额外验证项

  • 确保前端复选框HTML代码正确,示例:
    <input type="checkbox" name="checkmes" value="Si" /> 月度附加商品
    
  • 确认你的WooCommerce版本为3.0及以上(支持WC()->request方法)。
  • 若使用AJAX添加购物车,需确保复选框数据被正确包含在AJAX请求参数中。

内容的提问来源于stack exchange,提问作者Ruben Ruiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:40:35