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

如何为WooCommerce批发商角色设置分类专属最小订购量规则?

改进WooCommerce批发商购物车最小订购量规则

功能需求

  • 仅对批发商角色用户生效
  • 需满足以下任一条件才能下单:
    • 购物车中袜子类商品数量≥3
    • 购物车中帽子类商品数量≥3
    • 购物车中衬衫类商品数量≥2
  • 满足上述任一条件后,可添加任意商品,不受最小订购量限制
  • 示例场景:
    1. 若添加至少3件帽子,可忽略袜子、衬衫的最小订购规则
    2. 若添加1件袜子+2件帽子,需补购2件袜子或1件帽子才能完成下单

现有代码存在的问题

  • 未实现批发商角色检查,规则会对所有用户生效
  • 缺失衬衫分类的数量统计与规则判断逻辑
  • 条件判断逻辑错误,当前仅当袜子和帽子数量都低于最小值时才提示,不符合需求

改进后的代码

function action_woocommerce_check_cart_items() {
    // 仅在购物车或结算页运行
    if ( !is_cart() && !is_checkout() ) return;

    // 获取当前用户
    $current_user = wp_get_current_user();
    // 检查用户是否为批发商角色,不是则直接退出
    if ( empty( $current_user ) || !in_array( 'wholesaler', $current_user->roles ) ) return;

    // 定义各分类的最小订购量(分类slug => 最小数量)
    $category_minimums = array(
        'socks'   => 3,
        'hats'    => 3,
        'shirts'  => 2
    );

    // 初始化各分类数量统计
    $category_totals = array_fill_keys( array_keys( $category_minimums ), 0 );

    // 遍历购物车商品统计各分类数量
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        $product_id = $cart_item['product_id'];
        foreach ( $category_minimums as $category_slug => $min_qty ) {
            if ( has_term( $category_slug, 'product_cat', $product_id ) ) {
                $category_totals[$category_slug] += $cart_item['quantity'];
                break; // 一个商品可能属于多个分类,这里统计一次即可
            }
        }
    }

    // 检查是否满足任一分类的最小订购量
    $meets_requirement = false;
    foreach ( $category_minimums as $category_slug => $min_qty ) {
        if ( $category_totals[$category_slug] >= $min_qty ) {
            $meets_requirement = true;
            break;
        }
    }

    // 若未满足任一条件,且购物车中有商品,提示错误
    if ( !$meets_requirement && WC()->cart->get_cart_contents_count() > 0 ) {
        // 构建提示文本,列出各分类的最小要求
        $notice_text = '<strong>批发商订购规则:</strong>需满足以下任一条件才能下单:<ul>';
        foreach ( $category_minimums as $category_slug => $min_qty ) {
            $category_name = get_term_by( 'slug', $category_slug, 'product_cat' )->name;
            $notice_text .= '<li>至少购买 ' . $min_qty . ' 件 ' . $category_name . '</li>';
        }
        $notice_text .= '</ul>';

        wc_add_notice( $notice_text, 'error' );
        // 移除结算按钮
        remove_action( 'woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 20 );
    }
}
add_action( 'woocommerce_check_cart_items', 'action_woocommerce_check_cart_items', 10, 0 );

代码改进说明

  • 用户角色检查:通过wp_get_current_user()获取当前用户,判断是否属于wholesaler角色,非批发商直接跳过规则
  • 分类规则配置化:用数组统一管理各分类的最小订购量,便于后续扩展修改
  • 完整分类统计:添加衬衫分类的数量统计逻辑,遍历所有配置的分类进行统计
  • 正确的规则判断:只要满足任一分类的最小订购量,就允许下单;否则提示所有分类的要求
  • 友好提示文本:动态获取分类名称,列出所有需要满足的条件,让用户更清晰了解规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:37:13