Ten kod PHP jest specyficzny dla WooCommerce i służy do automatycznego zmieniania statusu zamówienia. Kiedy klient dokonuje zakupu i zamówienie przechodzi do stanu „processing„, ten kod natychmiast zmienia status zamówienia na „on-hold„. Zmiana ta następuje po zdarzeniu „woocommerce_thankyou„, które jest wywoływane po sfinalizowaniu zakupu przez klienta. Kod jest zabezpieczony przed próbą manipulacji zamówieniem bez podanego identyfikatora zamówienia.
function QuadLayers_change_order_status( $order_id ) { if ( ! $order_id ) {return;} $order = wc_get_order( $order_id ); if( 'processing'== $order->get_status() ) { $order->update_status( 'wc-on-hold' ); } } add_action('woocommerce_thankyou','QuadLayers_change_order_status');
function QuadLayers_change_order_status( $order_id ): Ta linia definuje nową funkcję o nazwie QuadLayers_change_order_status. Funkcja ta przyjmuje jeden argument, $order_id, który reprezentuje identyfikator zamówienia.
{ if ( ! $order_id ) {return;}: Jeśli funkcja nie otrzyma identyfikatora zamówienia ($order_id), zwraca null i kończy wykonywanie. Jest to mechanizm zabezpieczający przed próbą manipulacji zamówieniem, które nie istnieje.
$order = wc_get_order( $order_id );: To jest wywołanie funkcji wc_get_order z WooCommerce, które pobiera zamówienie na podstawie podanego identyfikatora zamówienia. Obiekt zamówienia jest następnie zapisywany w zmiennej $order.
if( 'processing’== $order->get_status() ): Ta linia kodu sprawdza, czy status obiektu zamówienia jest równy ’processing’. Jeśli tak, to kod wewnątrz tej instrukcji warunkowej zostanie wykonany.
$order->update_status( 'wc-on-hold’ );: Jeśli powyższy warunek jest spełniony (status zamówienia to ’processing’), ta linia kodu aktualizuje status zamówienia na ’wc-on-hold’.
add_action(’woocommerce_thankyou’, 'QuadLayers_change_order_status’);: Ostatnia linia kodu dodaje wcześniej zdefiniowaną funkcję QuadLayers_change_order_status do zdarzenia ’woocommerce_thankyou’. To zdarzenie jest wywoływane przez WooCommerce po sfinalizowaniu zamówienia przez klienta. Oznacza to, że każde zamówienie, które zostanie złożone i przejdzie do statusu ’processing’, automatycznie zmieni swój status na ’wc-on-hold’.