woocommerce_order_status_changed

WooCommerce voert deze action uit wanneer de status van een bestelling verandert. De callback ontvangt de bestel-ID, vorige status, nieuwe status en het huidige bestelobject.

Kort overzicht

TypeActionhook
OnderdeelBestellingen
Argumenten$order_id (int), $old_status (string), $new_status (string), $order (WC_Order)
BronWooCommerce-codereferentie

Hoe het werkt

De action wordt uitgevoerd terwijl WooCommerce de statuswijziging van de bestelling verwerkt. Statuswaarden zoals processing en completed zijn gewone statusslugs zonder het voorvoegsel wc-. Door vier geaccepteerde argumenten te registreren, kan je callback beide statussen en het bestelobject controleren.

PHP-voorbeeld

add_action( 'woocommerce_order_status_changed', function ( $order_id, $old_status, $new_status, $order ) {
    if ( 'completed' === $new_status ) {
        $order->add_order_note( 'Order reached completed status.' );
    }
}, 10, 4 );

Dit voegt een privébestelnotitie toe telkens wanneer een bestelling de status completed krijgt. Als dezelfde bestelling die status later verlaat en opnieuw krijgt, wordt nog een notitie toegevoegd.

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

Dit is een hook voor statuswijzigingen, geen algemene gebeurtenis voor nieuwe bestellingen. WooCommerce voert deze uit wanneer een bestelling al een vorige status heeft die verandert. Wil je reageren op het aanmaken van een bestelling zelf, gebruik dan een gebeurtenis die voor die fase is bedoeld.

Een bestelling kan meer dan één keer de status completed krijgen en medewerkers kunnen statussen handmatig wijzigen. Voorkom bij meldingen, fulfilmentkoppelingen of andere externe handelingen dat dezelfde bewerking dubbel wordt uitgevoerd. Bovendien beschrijft completed de afhandelingsstatus van een bestelling en vormt het geen bewijs dat een specifieke betaling daadwerkelijk is geïnd.

Compatibiliteit

Deze action heeft betrekking op WooCommerce-bestellingen, niet op een specifieke afrekenpagina. Hij kan worden uitgevoerd bij wijzigingen door beheerders en programmatische wijzigingen. Callbacks mogen dus niet aannemen dat een klant de winkel bekijkt. Gebruik voor aangepaste bestelmetadata $order->get_meta() en $order->update_meta_data(), gevolgd door $order->save(), om compatibel te blijven met High-Performance Order Storage (HPOS).