woocommerce_before_calculate_totals

Deze action wordt uitgevoerd voordat WooCommerce de winkelwagentotalen berekent. Ontwikkelaars kunnen daarbij de huidige winkelwagenartikelen en hun productobjecten bekijken en aanpassen.

Kort overzicht

TypeActionhook
OnderdeelWinkelwagentotalen
Argumenten$cart (WC_Cart)
BronWooCommerce-codereferentie

Hoe het werkt

WooCommerce roept do_action() aan tijdens WC_Cart::calculate_totals() en geeft het winkelwagenobject door. Een callback kan artikelen controleren voordat de totalen worden berekend. De totalen kunnen binnen één verzoek meerdere keren opnieuw worden berekend. Voorkom daarom dat je een al aangepaste prijs telkens vermenigvuldigt of verder verlaagt.

PHP-voorbeeld

add_action( 'woocommerce_before_calculate_totals', function ( $cart ) {
    if ( is_admin() && ! wp_doing_ajax() ) {
        return;
    }

    foreach ( $cart->get_cart() as $item ) {
        if ( 123 === (int) $item['product_id'] ) {
            $item['data']->set_price( 19.00 );
        }
    }
} );

Vervang product-ID 123 en de prijs door waarden voor je eigen winkel. Hiermee stel je een vaste prijs per stuk in en voorkom je herhaalde procentuele aanpassingen bij herberekeningen.

Plaats de code in een sitespecifieke plug-in of in het bestand functions.php van een child-thema en test deze vervolgens op een testsite.

Veelvoorkomende valkuilen

WooCommerce kan de totalen meerdere keren berekenen wanneer een klant de winkelwagen of afrekenpagina bijwerkt. Als je telkens een percentage aftrekt van $item['data']->get_price(), kan de korting bij elke berekening groter worden. Het voorbeeld stelt daarom een vaste prijs in en geeft bij herhaald uitvoeren hetzelfde resultaat. Roep $cart->calculate_totals() niet aan vanuit deze callback, omdat je daarmee dezelfde berekening opnieuw kunt starten.

Bij een productvariatie verwijst $item['product_id'] naar het hoofdproduct en $item['variation_id'] naar de specifieke variatie. Het voorbeeld gebruikt de ID van het hoofdproduct en heeft daardoor ook invloed op de variaties ervan.

Compatibiliteit

Dit is een hook voor winkelwagenberekeningen, niet voor het tonen van afrekenformulieren. Controleer het resultaat met je belastingen, kortingen, abonnementen en afrekeninstellingen voordat je de code op een live site gebruikt.