WooCommerce无法检测复选框选中状态,无法添加对应附加商品
问题解决:复选框勾选检测失败,无法添加附加商品到购物车
核心问题分析
你的代码存在几个关键错误,直接导致复选框检测逻辑失效:
- 产品ID判断误用赋值运算符:
if($id = '147430')这里使用了赋值操作=而非比较操作==/===,会让这个条件始终为真,干扰后续逻辑执行。 - 直接调用全局
$_POST存在风险:WooCommerce有自身的请求处理机制,直接依赖$_POST可能无法正确获取表单数据。 - 过时的产品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
相关产品推荐
相关产品推荐

