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

How to Apply BOGO (Buy One Get One) for Customer Role in WooCommerce?

When users register during checkout or signup, they get the ‘customer role’ on your site. In this guide, we will focus on these customers by offering discounts that match their preferences and needs.

Solution: Apply BOGO (Buy One Get One) for Customer Role in WooCommerce

This code snippet implements a 50% discount on the second item for specific products purchased by customers with certain roles.

add_action('woocommerce_cart_calculate_fees', 'ts_custom_discount_2nd_at_50', 10, 1 );

function ts_custom_discount_2nd_at_50( $cart ){
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // YOUR SETTINGS:
    $targeted_product_id = 34; // Set HERE your targeted product ID
    $allowed_customer_roles = array('customer'); // Specify the allowed customer roles

    // Check if the current user has the allowed customer role
    if ( ! is_user_logged_in() || ! array_intersect($allowed_customer_roles, wp_get_current_user()->roles) )
        return;

    // Initializing variables
    $discount = $qty_notice = 0;
    $items_prices = array();

    // Loop through cart items
    foreach ( $cart->get_cart() as $key => $cart_item ) {
        if( in_array( $targeted_product_id, [$cart_item['product_id'], $cart_item['variation_id']] ) ){
            $quantity = (int) $cart_item['quantity'];
            $qty_notice += $quantity;
            for( $i = 0; $i < $quantity; $i++ ) {
                $items_prices[] = floatval( $cart_item['data']->get_price());
            }
        }
    }

    $count_items = count($items_prices); // Count items

    rsort($items_prices); // Sorting prices descending order

    if( $count_items > 1 ) {
        foreach( $items_prices as $key => $price ) {
            if( $key % 2 == 1 )
                $discount -= number_format( $price / 2, 2 );
        }
    }

    // Applying the discount
    if( $discount != 0 ){
        $cart->add_fee('Buy one get one 50% off', $discount );

        // Displaying a custom notice (optional)
        wc_clear_notices(); // clear other notices on checkout page.
        if( ! is_checkout() ){
            wc_add_notice( __("You get 50% of discount on the 2nd item"), 'notice');
        }
    }
    // Display a custom notice on cart page when quantity is equal to 1.
    elseif( $qty_notice == 1 ){
        wc_clear_notices(); // clear other notices on checkout page.
        if( is_cart() ){
            wc_add_notice( __( "Add one more to get 50% off on 2nd item" ), 'notice');
        }
    }
}
flexi bogo cta banner image


This to the shop owners who are running or planning to run BOGO offers on their WooCommerce store…

BOGO deals are great for increasing your sales, but have you thought about which offers are bringing you more revenue and which offers are not performing that great?

Don’t just set a BOGO deal, track the revenue generated by your deals in real-time with the Flexi BOGO for WooCommerce plugin.

Output

When the user logs in as a ‘customer’ role, and adds the product i.e. T-shirt with Logo on to the cart page with the quantity of 2, the BOGO offer gets applied as shown below.

BOGO (Buy One Get One) for Customer Role

Instead of targeting specific customer role you can target a broader audience and apply BOGO (Buy One Get One) offers for guest users in WooCommerce.

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

Share It:

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