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

如何为WooCommerce简单/可变产品设置基于购物车最低值的起订量

WooCommerce 简单/可变产品最低起订量优化实现

你需要实现的是:给WooCommerce简单产品和可变产品添加最低起订量字段,添加商品到购物车时自动将数量设为最低起订量,且购物车中商品数量无法低于该值,同时确保所有商品都遵循各自的最低起订量规则。下面是修改后的完整代码及关键说明:

/*Minimum Order - Simple & Variable Product*/
// Add minimum order field to product options
function add_minimum_order_field() {
    global $product_object;

    woocommerce_wp_text_input(
        array(
            'id' => 'minimum_order',
            'class' => 'wc_input_price short',
            'label' => 'Minimum Order',
            'desc_tip' => true,
            'description' => 'Set minimum order for this product',
            'value' => get_post_meta($product_object->get_id(), 'minimum_order', true), // Populate the field with the saved value
        )
    );
}
add_action('woocommerce_product_options_pricing', 'add_minimum_order_field');

// Save minimum order field value
function save_minimum_order_field($product) {
    $minimum_order = isset($_POST['minimum_order']) ? wc_clean($_POST['minimum_order']) : '';
    $product->update_meta_data('minimum_order', $minimum_order);
}
add_action('woocommerce_admin_process_product_object', 'save_minimum_order_field');

// Add minimum order field to product variations
function add_minimum_order_field_to_variations($loop, $variation_data, $variation) {
    woocommerce_wp_text_input(
        array(
            'id' => 'minimum_order[' . $variation->ID . ']',
            'class' => 'wc_input_price short',
            'label' => 'Minimum Order',
            'desc_tip' => true,
            'description' => 'Set minimum order for this variation',
            'value' => get_post_meta($variation->ID, 'minimum_order', true), // Populate the field with the saved value
        )
    );
}
add_action('woocommerce_variation_options_pricing', 'add_minimum_order_field_to_variations', 10, 3);

// Save minimum order field value for product variations
function save_minimum_order_field_for_variations($variation_id, $i) {
    $minimum_order = isset($_POST['minimum_order'][$variation_id]) ? wc_clean($_POST['minimum_order'][$variation_id]) : '';
    update_post_meta($variation_id, 'minimum_order', $minimum_order);
}
add_action('woocommerce_save_product_variation', 'save_minimum_order_field_for_variations', 10, 2);

// Validate minimum order on add to cart & auto adjust quantity
function validate_minimum_order($passed, $product_id, $quantity) {
    $minimum_order = get_post_meta($product_id, 'minimum_order', true);

    // 如果设置了最低起订量且用户输入数量低于该值,自动修正
    if (!empty($minimum_order) && $quantity < $minimum_order) {
        WC()->cart->set_quantity($product_id, $minimum_order);
        wc_add_notice(sprintf('已自动将数量调整为最低起订量:%s', $minimum_order), 'notice');
    }

    return $passed;
}
add_filter('woocommerce_add_to_cart_validation', 'validate_minimum_order', 10, 3);

// 设置数量输入框最小值为最低起订量,阻止手动输入低于阈值的数量
function set_min_quantity_input_args($args, $product) {
    $minimum_order = '';
    
    // 区分普通产品和变体产品,获取对应ID的最低起订量
    if ($product->is_type('variation')) {
        $minimum_order = get_post_meta($product->get_id(), 'minimum_order', true);
    } else {
        $minimum_order = get_post_meta($product->get_id(), 'minimum_order', true);
    }
    
    if (!empty($minimum_order)) {
        $args['min_value'] = $minimum_order;
    }
    
    return $args;
}
add_filter('woocommerce_quantity_input_args', 'set_min_quantity_input_args', 10, 2);

// 购物车更新时强制数量不低于最低起订量,拦截减少操作
function enforce_minimum_order_on_cart_update($cart_item_key, $quantity, $cart_item) {
    $product_id = $cart_item['product_id'];
    // 变体产品使用变体ID获取最低起订量
    if (!empty($cart_item['variation_id'])) {
        $product_id = $cart_item['variation_id'];
    }
    
    $minimum_order = get_post_meta($product_id, 'minimum_order', true);
    
    if (!empty($minimum_order) && $quantity < $minimum_order) {
        WC()->cart->set_quantity($cart_item_key, $minimum_order);
        wc_add_notice(sprintf('%s 的数量已恢复为最低起订量:%s', $cart_item['data']->get_name(), $minimum_order), 'notice');
    }
}
add_action('woocommerce_after_cart_item_quantity_update', 'enforce_minimum_order_on_cart_update', 10, 3);

关键修改说明:

  • 修正拼写错误:将原代码中后台字段的Minimim统一改为Minimum,避免显示混乱。
  • 自动调整添加数量:当用户尝试添加低于最低起订量的商品时,不再直接拦截,而是自动将数量修正为最低起订量并给出提示。
  • 限制输入框最小值:通过过滤器设置商品数量输入框的最小值为对应产品的最低起订量,用户无法手动输入低于该值的数字。
  • 拦截购物车减少操作:监听购物车数量更新动作,若用户尝试将数量降到最低起订量以下,强制恢复为最低值并提示。
  • 兼容可变产品变体:针对可变产品的每个变体,单独获取其设置的最低起订量,确保变体的规则独立生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:34:51