基于购物车产品ID控制WooCommerce结算页复选框显示隐藏的代码修改方案
实现修改说明
你需要同步调整复选框渲染逻辑和表单验证逻辑,避免隐藏复选框后仍然触发必填校验导致无法提交订单,修改后的完整代码如下:
add_action( 'woocommerce_review_order_before_submit', 'bbloomer_add_checkout_privacy_policy', 9 ); function bbloomer_add_checkout_privacy_policy() { // 配置需要判断的目标商品ID $target_product_id = 32; $has_target_product = false; // 遍历购物车判断是否存在目标商品 foreach ( WC()->cart->get_cart() as $cart_item ) { if ( $cart_item['product_id'] == $target_product_id ) { $has_target_product = true; break; } } // 仅当购物车无目标商品时输出隐私政策复选框 if ( !$has_target_product ) { woocommerce_form_field( 'privacy_policy', array( 'type' => 'checkbox', 'class' => array('form-row privacy'), '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' => 'I\'ve read and accept the <a href="/privacy-policy">Privacy Policy</a>', )); } } // 表单校验逻辑同步调整 add_action( 'woocommerce_checkout_process', 'bbloomer_not_approved_privacy' ); function bbloomer_not_approved_privacy() { // 和渲染逻辑保持一致的判断规则 $target_product_id = 32; $has_target_product = false; foreach ( WC()->cart->get_cart() as $cart_item ) { if ( $cart_item['product_id'] == $target_product_id ) { $has_target_product = true; break; } } // 仅当无目标商品时才校验复选框是否勾选 if ( !$has_target_product && empty( $_POST['privacy_policy'] ) ) { wc_add_notice( __( 'Please acknowledge the Privacy Policy' ), 'error' ); } }
内容的提问来源于stack exchange,提问作者Emmanuel Kuebu
相关产品推荐
相关产品推荐

