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

WooCommerce结账验证:B2B注册用户与购物车内容校验问题

解决方案:在结账提交前校验角色选择与购物车内容

问题核心在于常规WooCommerce钩子触发时,新用户角色尚未完成注册,无法通过当前用户角色判断。我们需要直接读取结账页面的角色选择字段值,提前完成校验。

实现逻辑:

  • 拦截结账提交动作,获取访客选择的角色值
  • 遍历购物车商品,检查是否包含「Normal」品类商品
  • 若同时满足「选择B2B角色」+「购物车有Normal商品」,抛出错误阻止订单提交

代码实现(添加到主题functions.php或自定义插件):

add_action('woocommerce_checkout_process', 'check_b2b_role_and_normal_products');
function check_b2b_role_and_normal_products() {
    // 读取结账页面的角色选择字段值
    if (isset($_POST['afreg_select_user_role']) && $_POST['afreg_select_user_role'] === 'wwp_wholesaler') {
        $has_normal_product = false;
        // 遍历购物车,检查商品是否属于Normal品类(替换为你的品类slug)
        foreach (WC()->cart->get_cart() as $cart_item) {
            $product_id = $cart_item['product_id'];
            // 此处替换'normal'为你实际的Normal品类slug
            if (has_term('normal', 'product_cat', $product_id)) {
                $has_normal_product = true;
                break;
            }
        }
        // 触发错误提示,阻止订单提交
        if ($has_normal_product) {
            wc_add_notice(__('B2B客户无法购买常规品类商品,请移除购物车中的常规商品后再提交订单。', 'woocommerce'), 'error');
        }
    }
}

注意事项:

  • 请将代码中的'normal'替换为你实际的「Normal」商品品类slug(可在WordPress后台「商品-品类」中查看)
  • woocommerce_checkout_process钩子会在订单提交前触发,能有效拦截不符合条件的请求
  • 无需重置购物车,直接通过错误提示引导用户调整购物车内容即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:55:01