Een minimumbestelbedrag instellen bij het afrekenen in WooCommerce
Stel met PHP een minimum voor WooCommerce-bestellingen in, toon het resterende bedrag en controleer zowel de klassieke als de blokgebaseerde afrekenpagina.
Laatst bijgewerkt:
Engelstalig origineel op juistheid gecontroleerd door Jesse Nickles
Bepalen welk bedrag meetelt voor de ondergrens
WooCommerce heeft geen ingebouwde instelling voor een minimumbestelbedrag, maar je kunt dat met PHP of een extensie regelen. In dit voorbeeld moeten klanten na kortingsbonnen minstens 50 aan artikelen bestellen, in de valuta van je winkel. Verzendkosten, btw en toeslagen tellen niet mee; precies 50 is genoeg.
Met get_cart_contents_total() controleert het fragment het artikelsubtotaal na korting. Wil je de ondergrens vóór kortingen toepassen, gebruik dan get_subtotal(). Dat maakt verschil: artikelen ter waarde van 55 met een kortingsbon van 10 komen na korting 5 tekort, maar voldoen vóór korting wel aan de ondergrens. De verwante handleiding voor een toeslag op kleine bestellingen legt hetzelfde verschil uit wanneer je een toeslag wilt berekenen in plaats van afrekenen te blokkeren.
De controle bij het afrekenen toevoegen
Maak eerst een back-up en test de wijziging in een testomgeving. Voeg onderstaande PHP-code toe aan functions.php van je actieve childtheme of aan een sitespecifieke plugin. Voeg binnen een bestaand PHP-bestand niet opnieuw een openingscode <?php toe. Gebruik je HoverCraft, volg dan de instructies voor childthemes; wijzigingen in het hoofdthema kunnen bij een update verloren gaan.
function myshop_minimum_order_message( $cart ) {
if ( ! $cart || $cart->is_empty() ) {
return '';
}
$minimum = 50.00;
$current = (float) $cart->get_cart_contents_total();
if ( $current >= $minimum ) {
return '';
}
return sprintf(
'Add %1$s more to reach the %2$s minimum order amount.',
wp_strip_all_tags( html_entity_decode( wc_price( $minimum - $current ), ENT_QUOTES, get_bloginfo( 'charset' ) ) ),
wp_strip_all_tags( html_entity_decode( wc_price( $minimum ), ENT_QUOTES, get_bloginfo( 'charset' ) ) )
);
}
add_action( 'woocommerce_checkout_process', function () {
$message = myshop_minimum_order_message( WC()->cart );
if ( $message && ! wc_has_notice( $message, 'error' ) ) {
wc_add_notice( $message, 'error' );
}
} );
add_action( 'woocommerce_checkout_validate_order_before_payment', function ( $order, $errors ) {
$message = myshop_minimum_order_message( WC()->cart );
if ( $message ) {
$errors->add( 'myshop_minimum_order', $message );
}
}, 10, 2 );
Vervang 50.00 door je gewenste grensbedrag en vervang myshop in de functienaam en foutcode door een unieke prefix voor je site. Gebruik voor deze regel niet het volledige winkelwagentotaal: dat bevat ook andere kosten en kan veranderen zodra een klant een bezorgadres kiest.
Het verschil tussen klassiek afrekenen en het Checkout-blok
De twee validatiehooks bedienen verschillende manieren van afrekenen. woocommerce_checkout_process voegt een foutmelding toe bij de klassieke afrekenpagina met shortcode. De hook woocommerce_checkout_validate_order_before_payment voegt bij het Checkout-blok een fout toe aan de servercontrole vóór de betaling. Met beide hooks werkt dezelfde minimumregel voor beide indelingen, zonder aan te nemen dat de klassieke hook ook in het Checkout-blok werkt. De hook voor blokafrekenen is beschikbaar vanaf WooCommerce 9.9. Werk oudere installaties bij of gebruik een geschikte extensie.
Het fragment controleert pas wanneer de klant de bestelling probeert te plaatsen. Artikelen onder de ondergrens kunnen dus gewoon aan de winkelwagen worden toegevoegd; ook verschijnt er niet voortdurend een melding op de winkelwagenpagina. Zo kan de klant eerst meer artikelen toevoegen. Wil je al in de winkelwagen waarschuwingen tonen, andere bedragen per klantgroep hanteren of regels beheren in WP Admin, overweeg dan een geschikte extensie. De documentatie van WooCommerce Minimum Order Amount beschrijft zulke mogelijkheden voor de klassieke en blokgebaseerde indeling.
Het grensbedrag en de foutmelding testen
- Test een winkelwagen net onder 50, precies op 50 en net erboven. De eerste moet bij het afrekenen worden geweigerd; de andere twee moeten deze controle doorstaan.
- Pas een kortingsbon toe waardoor een winkelwagen die eerst voldeed onder 50 uitkomt. Controleer of de melding het juiste resterende bedrag toont.
- Test een winkel die prijzen inclusief btw toont en voeg verzendkosten toe. Dit voorbeeld controleert nog steeds het artikelbedrag na korting, exclusief btw, verzendkosten en toeslagen.
- Test de klassieke afrekenpagina of het Checkout-blok dat je winkel werkelijk gebruikt, zowel als gast als met een account. Controleer dat een te kleine bestelling niet kan worden betaald.
Werkt de regel niet, controleer dan of je childtheme of plugin de code laadt en of er geen PHP-fout optreedt. Wijkt het getoonde bedrag af van wat klanten verwachten, bekijk dan de btw-weergave en je keuze voor het subtotaal vóór of na korting. Controleer de werking opnieuw na belangrijke updates van WooCommerce of een checkout-extensie.