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

WooCommerce指定ID商品购买验证代码失效问题求助

修复特定商品购买验证的代码问题

你的代码无法正常工作主要有三个核心问题,下面逐一说明并给出修正方案:

问题分析

  • 逻辑执行顺序错误:原代码中if条件满足后直接执行return,导致后续的错误提示代码完全无法运行,逻辑完全颠倒。
  • 判断场景不匹配:woocommerce_after_checkout_validation钩子触发于结账验证阶段,此时处于结账页面,is_product()和is_single()这类判断商品详情页的函数不会生效,应该检查购物车中是否包含目标商品。
  • 多余HTML标签:错误消息中的</div>属于多余标签,wc_add_notice会自动处理通知的HTML结构,保留该标签会导致显示异常。

修正后的代码

function validate_restricted_product( $data, $errors ) {
    $target_product_id = 1566;
    $product_in_cart = false;

    // 遍历购物车,检查是否包含目标商品
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        if ( $cart_item['product_id'] == $target_product_id ) {
            $product_in_cart = true;
            break;
        }
    }

    // 若检测到目标商品,添加错误通知阻止结账
    if ( $product_in_cart ) {
        $p = wc_get_product( $target_product_id );
        $message = sprintf( __( '%s 仅对特定客户开放购买。', 'text-domain' ), $p->get_name() );
        wc_add_notice( $message, 'error' );
    }
}
add_action( 'woocommerce_after_checkout_validation', 'validate_restricted_product', 10, 2 );

修正说明

  1. 适配结账场景:通过遍历购物车商品,准确检测目标商品是否在用户的待结账列表中。
  2. 调整逻辑顺序:仅当检测到目标商品时,才触发错误通知,阻止结账流程。
  3. 修复显示问题:移除多余的HTML标签,确保通知内容正常渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:01:10