【问题标题】:Limit maximum quantity of free products in Woocommerce cart限制 Woocommerce 购物车中免费产品的最大数量
【发布时间】:2021-10-28 15:44:43
【问题描述】:

我的客户要求能够在其 Woocommerce 在线商店中提供其可变产品的免费样品,每个独特的产品样品最多 1 个,订单上的任何样品最多 5 个。

我通过为每个产品添加额外的“免费样品”变体,然后使用免费的最小/最大数量插件将每个单独的免费样品的数量限制为每个订单 1 个,从而实现了部分目的,请参阅以下内容截图:

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

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

干杯,

M.

【问题讨论】:

    标签: php wordpress woocommerce hook cart


    【解决方案1】:

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

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

    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 );
    

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

    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 添加条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-14
      • 2018-02-10
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 2021-05-09
      相关资源
      最近更新 更多