Black Friday & Cyber Monday SUPER SALE ALL WEEK:
Grab 40% OFF on plugins
Days
Hours
Minutes
Seconds

How to Limit Free Products For User When Offering BOGO(Buy One Get One) Offers in WooCommerce?

This customization is mainly used in cases where online store owners would like to encourage repeat purchases. This code helps control BOGO “Buy One Get One” promotions for each user. It sets a limit on how many free products a user can get and keeps track of the count. Once a user reaches the set limit, they’ll receive a notice saying they’ve hit the maximum and can’t get more free products.

add_action('woocommerce_before_calculate_totals', 'ts_add_free_product_to_cart');

function ts_add_free_product_to_cart($cart) {
    // Check if the user is logged in
    $user_id = get_current_user_id();

    if ($user_id > 0) {
        // Get the user meta field to track the number of times the free product has been added
        $free_product_count = get_user_meta($user_id, 'ts_free_product_count', true);
        $free_product_count = intval($free_product_count);

        // Define the maximum number of times the free product can be added (5 times in this case)
        $max_free_product_count = 5;

        // Define the free product ID
        $free_product_id = 470; // Replace with the actual ID of your free product

        // Check if the free product is not already in the cart
        $free_product_in_cart = false;

        foreach ($cart->get_cart() as $cart_item) {
            if ($cart_item['product_id'] == $free_product_id) {
                $free_product_in_cart = true;
                break;
            }
        }

        // If the free product is not in the cart and the user is eligible (not exceeded the limit), add it
        if (!$free_product_in_cart && $free_product_count < $max_free_product_count) {
            $cart->add_to_cart($free_product_id);

            // Increment the free product count for the user
            $free_product_count++;
            update_user_meta($user_id, 'ts_free_product_count', $free_product_count);
        } elseif (!$free_product_in_cart && $free_product_count >= $max_free_product_count && !isset(WC()->session->added_notice)) {
            // Add a notice if the maximum usage limit is exceeded and the free product is not in the cart
            wc_add_notice(__('Maximum usage limit exceeded for getting the free product', 'your-text-domain'), 'error');

            // Set a session variable to mark that the notice has been added
            WC()->session->added_notice = true;
        }
    }
}

Output

Let’s say you have set a BOGO promotion limit to 5 as defined in the code($max_free_product_count = 5) for each user. When the user makes a purchase, he gets a free product. Later on, when the user makes four more purchases, each time they will get a free product as shown below.

How to Limit Free Products For User When Offering BOGO(Buy One Get One) Offers in WooCommerce? - Tyche Softwares

But as the limit of free products to each user is set to 5 in the code, when the user attempts to make another purchase on the 6th time to qualify for a free product, the code will generate a notice message.

How to Limit Free Products For User When Offering BOGO(Buy One Get One) Offers in WooCommerce? - Tyche Softwares

In this post, we are restricting the allocation of the number of free products offered to each user. Alternatively, you can also add free products to certain user roles as well. Refer to our post that guides you well on how to apply buy one get one for customer role in WooCommerce.

Browse more in: Code Snippets, WooCommerce How Tos, WooCommerce Tutorials

Share It:

Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x