Automatisch een gratis cadeau toevoegen aan je winkelwagen in WooCommerce

Automatisch een gratis cadeau toevoegen aan je winkelwagen in WooCommerce

Wil je klanten belonen met een gratis product zodra ze boven een bepaald bedrag bestellen? Dat kan eenvoudig met een klein stukje code in WooCommerce. In deze blog laten we zien hoe je automatisch een gratis cadeau toevoegt bij een minimale bestelwaarde — zonder extra plugins, én met een duidelijke melding voor de klant.

waarom een gratis cadeau?

Een gratis product is een slimme manier om:

  • het gemiddelde bestelbedrag te verhogen

  • klanten te verrassen en aan je merk te binden

  • je voorraad van kleine producten slim in te zetten

Veel webshops gebruiken dit bijvoorbeeld rond de feestdagen: “Bestel boven de €39 en ontvang gratis kerstsokken!”

hoe werkt het technisch?

Met een korte PHP-snippet in je thema (of een mini-plugin) controleert WooCommerce telkens de inhoud van de winkelwagen. Zodra het subtotaal boven de ingestelde grens komt, voegt het systeem automatisch een bepaald product toe.

Daalt het bedrag weer onder de drempel? Dan wordt het cadeau weer verwijderd.

Daarnaast zorgt de code ervoor dat:

  • de prijs van het cadeau altijd €0 blijft

  • wholesale-klanten of B2B-rollen uitgesloten kunnen worden

  • er geen dubbele exemplaren in het mandje komen

  • het cadeau zichtbaar is met een mooie banner boven de winkelwagen

de code

Plaats onderstaande code in functions.php van je (child)theme of in een eigen plugin:

// gratis cadeau boven €39 – inclusief banner
// volledige code zie: https://hakhak.nl/blog/gratis-product-woocommerce
add_action(‘wp’, ‘czo_handle_free_gift’);
add_action(‘woocommerce_before_calculate_totals’, ‘czo_handle_free_gift’, 1);

function czo_handle_free_gift() {
if ( is_admin() && ! wp_doing_ajax() ) return;
if ( ! ( is_cart() || is_checkout() || wp_doing_ajax() ) ) return;

$user = wp_get_current_user();
$excluded_roles = [ ‘wholesale_customer’, ‘b2b_user’, ‘wholesale_buyer’, ‘trade_customer’ ];
if ( array_intersect( $excluded_roles, (array) $user->roles ) ) return;

$product_id = 306139; // ID van het cadeauproduct
$threshold = 39;
$cart = WC()->cart;
if ( ! $cart ) return;

$gift_key = false;
$gift_qty = 0;
$subtotal = 0.0;

foreach ( $cart->get_cart() as $key => $item ) {
if ( (int) $item[‘product_id’] === (int) $product_id ) {
$gift_key = $key;
$gift_qty += (int) $item[‘quantity’];
continue;
}
$subtotal += (float) $item[‘line_subtotal’];
}

if ( $subtotal >= $threshold && ! $gift_key ) {
$product = wc_get_product( $product_id );
$variation_id = 0;
$variation_data = [];
if ( $product && $product->is_type(‘variable’) ) {
$children = $product->get_children();
if ( ! empty( $children ) ) {
$variation_id = reset( $children );
$variation = new WC_Product_Variation( $variation_id );
foreach ( $variation->get_attributes() as $name => $value ) {
$variation_data[ ‘attribute_’ . $name ] = $value;
}
}
}
$cart->add_to_cart( $product_id, 1, $variation_id, $variation_data );
} elseif ( $subtotal < $threshold && $gift_key ) {
$cart->remove_cart_item( $gift_key );
}
}

// prijs altijd €0 houden
add_action(‘woocommerce_before_calculate_totals’, function( $cart ){
if ( ! $cart ) return;
$product_id = 306139;
foreach ( $cart->get_cart() as $item ) {
if ( (int) $item[‘product_id’] === (int) $product_id ) {
$item[‘data’]->set_price( 0 );
}
}
}, 999);

// banner boven winkelwagen/afrekenen
add_action( ‘woocommerce_before_cart’, ‘czo_show_free_gift_banner’ );
add_action( ‘woocommerce_before_checkout_form’, ‘czo_show_free_gift_banner’ );

function czo_show_free_gift_banner() {
$cart = WC()->cart;
if ( ! $cart ) return;

$product_id = 306139;
$threshold = 39;
$subtotal = $cart->get_subtotal();
$has_gift = false;

foreach ( $cart->get_cart() as $item ) {
if ( (int) $item[‘product_id’] === (int) $product_id ) {
$has_gift = true;
break;
}
}

if ( $has_gift ) {
echo ‘<div style=”background:#f6fff4;border:1px solid #c8e6c9;padding:12px 16px;margin-bottom:16px;border-radius:6px;color:#2e7d32;text-align:center;”>
Gratis cadeau toegevoegd aan je winkelwagen!</div>’;
} else {
$remaining = max( 0, $threshold – $subtotal );
echo ‘<div style=”background:#fff8e1;border:1px solid #ffe082;padding:12px 16px;margin-bottom:16px;border-radius:6px;color:#ff6f00;text-align:center;”>
⚠️ Nog €’ . wc_price( $remaining ) . ‘ bestellen voor een gratis cadeau!</div>’;
}
}

Let op: vervang 306139 door het product-ID van jouw cadeauartikel.
Zet dat product op “zichtbaar”, op voorraad en met een prijs van €0.

resultaat

  • Onder €39: een gele melding met het resterende bedrag

  • Boven €39: een groene banner met “Gratis cadeau toegevoegd aan je winkelwagen!”

  • Het cadeau verdwijnt automatisch zodra het totaal weer onder de drempel komt

  • Wholesale-klanten worden netjes uitgesloten

conclusie

Met een paar regels code kun je WooCommerce veel persoonlijker maken. Geen dure plugin, geen ingewikkelde instellingen — gewoon een klein cadeautje dat automatisch meebeweegt met de winkelwagen.

Een subtiele, maar effectieve manier om conversie én klanttevredenheid te verhogen


meer slimme WooCommerce-tips?

Bij HakHak delen we regelmatig korte, praktische oplossingen voor WordPress- en WooCommerce-sites.
Volg onze blog of schrijf je in voor de nieuwsbrief — dan mis je geen enkel scriptje, optimalisatie-tip of performance-hack.

Geplaatst in de categorie: Blog