首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Woocommerce购物车中限制免费产品的最大数量

在Woocommerce购物车中限制免费产品的最大数量
EN

Stack Overflow用户
提问于 2021-08-29 16:16:38
回答 1查看 158关注 0票数 0

我的客户要求在他们的Woocommerce在线商店上提供他们的可变产品的免费样品,每个独特的产品样品最多有1个,订单上的任何一个样品都有5个。

我为每个产品添加了额外的“免费样品”变体,然后使用免费的最小/最大数量插件将每个单独的免费样品数量限制为每个订单1个,请参见以下截图:

https://ibb.co/f0Wd7XC https://ibb.co/8DrsZZj

到目前为止,我还没有建立一个方法来限制任何“免费样本”变体组合的最大数量为5个。我能看到的唯一方法是将每个订单的免费产品总数(即价格= in 0)限制为5个,或者为每个变体分配一个特定的发货类别(即“免费样品”),然后以某种方式将每个订单中分配给该发货类别的产品数量限制为5个。这可能吗?

干杯,

M.

EN

回答 1

Stack Overflow用户

发布于 2021-08-30 08:11:31

Woocommerce有可以使用的验证钩子。

第一个是当我们添加到购物车中时

代码语言:javascript
复制
function add_to_cart_free_samples($valid, $product_id, $quantity) {
    $max_allowed = 5;
    $current_cart_count = WC()->cart->get_cart_contents_count();
    foreach (WC()->cart->get_cart() as $cart_item_key=>$cart_item ){
        // Here change attribute group if needed - currently assigned to default size attribute
        $variation = $cart_item['variation']['attribute_pa_size'];
    }
    if( ( $current_cart_count > $max_allowed || $current_cart_count + $quantity > $max_allowed ) && $variation === 'free-sample' && $valid ){
        wc_add_notice( sprintf( __( 'Whoa hold up. You can only have %d items in your cart', 'your-textdomain' ), $max_allowed ), 'error' );
        $valid = false;
    }

    return $valid;
}

add_filter( 'woocommerce_add_to_cart_validation', 'add_to_cart_free_samples', 10, 3 );

第二个是当我们在购物车页面上更新购物车的时候。

代码语言:javascript
复制
function update_add_to_cart_free_samples( $passed, $cart_item_key, $values, $updated_quantity ) {

    $cart_items_count = WC()->cart->get_cart_contents_count();
    $original_quantity = $values['quantity'];
    $max_allowed = 5;
    $total_count = $cart_items_count - $original_quantity + $updated_quantity;
    foreach (WC()->cart->get_cart() as $cart_item_key=>$cart_item ){
        // Here change attribute group if needed - currently assigned to default size attribute
        $variation = $cart_item['variation']['attribute_pa_size'];
    }
    if( $cart_items_count > $max_allowed && $variation === 'free-sample' ){
        $passed = false;
        wc_add_notice( sprintf( __( 'Whoa hold up. You can only have %d items in your cart', 'your-textdomain' ), $max_allowed ), 'error' );
    }
    return $passed;
}
add_filter( 'woocommerce_update_cart_validation', 'update_add_to_cart_free_samples', 10, 4 );

在$cart_item中,您可以调试并查看购物车中当前产品的所有信息。从那里,您可以添加条件取决于发货或属性或价格或w/e你想要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68974799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档