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

基于购物车产品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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:15:08