As a store owner, you wanted to give a percentage discount when the customer added a specific product multiple times on the WooCommerce cart page, This code helps in providing BOGO offers such as “Buy one, get one 50% off” discount on a specific product when added multiple times to the WooCommerce cart, applying the discount dynamically based on quantity.
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 // 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'); } } }
Output
When a customer adds the same item twice with a quantity of 2 on the WooCommerce cart page, a 50% discount is applied to the second item. This discount is then applied to the cart total, and a notice is displayed to the customer indicating that the discount has been applied.
Alternatively, you can also create BOGO (buy one get one) offers based on product IDs in WooCommerce cart page.