Woocommerce结账页条件必填复选框未显示时仍触发未勾选错误
WooCommerce 结账自定义复选框校验问题修复
修改逻辑
原有代码的校验逻辑未关联购物车商品判断,导致指定商品不在购物车时仍会触发复选框必填校验,仅需要在校验函数中新增商品存在判断即可。
修正后完整代码
/* 购物车内存在PDU订阅商品时在结账页添加自定义复选框 */ add_action( 'woocommerce_review_order_before_submit', 'wordimpress_custom_checkout_field', 10 ); function wordimpress_custom_checkout_field( $checkout ) { // 判断指定ID的商品是否在购物车,此处ID可替换为你需要的商品ID $book_in_cart = wordimpress_is_conditional_product_in_cart( 161042 ); // 商品存在时渲染复选框 if ( $book_in_cart === true ) { woocommerce_form_field( 'checkout_checkbox', array( 'type' => 'checkbox', 'class' => array('form-row mycheckbox'), 'label_class' => array('woocommerce-form__label woocommerce-form__label-for-checkbox checkbox'), 'input_class' => array('woocommerce-form__input woocommerce-form__input-checkbox input-checkbox'), 'required' => true, 'label' => '我已阅读并同意 <a href="#" target="_blank" rel="noopener">订阅条款</a>', )); } } add_action( 'woocommerce_checkout_process', 'bt_add_subscription_checkbox_warning' ); // 复选框未勾选时抛出错误提示 function bt_add_subscription_checkbox_warning() { // 先判断指定商品是否在购物车,存在才执行校验 $book_in_cart = wordimpress_is_conditional_product_in_cart( 161042 ); if ( $book_in_cart && empty( $_POST['checkout_checkbox'] ) ) { wc_add_notice( __( '你必须阅读并同意订阅条款才能开通月度订阅。' ), 'error' ); } } // 判断指定ID的商品是否在购物车 function wordimpress_is_conditional_product_in_cart( $product_id ) { global $woocommerce; $book_in_cart = false; foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) { $_product = $values['data']; if ( $_product->id === $product_id ) { $book_in_cart = true; } } return $book_in_cart; }
核心修改点
- 在
bt_add_subscription_checkbox_warning函数中新增了购物车商品判断逻辑,仅当ID为161042的商品在购物车时,才会校验自定义复选框是否勾选 - 优化了原有校验逻辑的判断写法,避免类型转换的冗余代码
- 翻译了前端展示的提示文本为中文,可根据需求自行调整内容
内容的提问来源于stack exchange,提问作者J.K.
相关产品推荐
相关产品推荐

