Masz sklep na WooCommerce i sprzedajesz e-booki, kursy online, dostęp do jakichś materiałów premium albo inne wirtualne cuda? No to super! Ale powiedz szczerze – nie wkurza Cię to ciągłe, ręczne zmienianie statusu zamówienia na „Zrealizowane” (Completed
) po każdej udanej płatności? Klient zapłacił, kasa na koncie, a Ty musisz jeszcze wejść i przeklikać status… Klik, klik, klik… można dostać szału, zwłaszcza jak tych zamówień wpada trochę więcej.
No bo po co to komu? Marnujesz swój cenny czas, który mógłbyś/mogłabyś poświęcić na rozwój biznesu, marketing albo chociażby na kawę! 😉 Poza tym, klient po zapłacie chce mieć dostęp od razu, a nie czekać, aż łaskawie zmienisz status. Automatyzacja tego procesu to nie tylko wygoda dla Ciebie, ale też lepsze doświadczenie dla kupującego i po prostu bardziej profesjonalne podejście.
„Ale zaraz”, możesz powiedzieć, „przecież WooCommerce coś tam sam robi!”. Ano robi. Jak masz produkt oznaczony jako „Wirtualny” (Virtual
) i „Do pobrania” (Downloadable
), to często po udanej płatności (np. przez Przelewy24, PayU itp.) status zamówienia automatycznie zmienia się na „W trakcie realizacji” (Processing
) albo nawet „Zrealizowane” (Completed
), a klient dostaje dostęp do plików. Problem w tym, że:
- Nie zawsze chcesz, żeby produkt był „Do pobrania” (może to dostęp do platformy, usługa online itp.).
- Czasem chcesz mieć 100% pewności, że każde opłacone zamówienie z jakimkolwiek produktem wirtualnym od razu dostaje status „Zrealizowane”, a nie „W trakcie realizacji”.
Na szczęście jest na to prosty sposób. I co najlepsze – nie potrzebujesz do tego kolejnej wtyczki, która zamuli Ci stronę! Wystarczy mały kawałek kodu.
Magiczny snippet, który załatwi sprawę
Spokojnie, to nie czarna magia. To tylko kilka linijek kodu PHP, które mówią WooCommerce: „Hej, jeśli ktoś właśnie zapłacił za zamówienie, w którym jest przynajmniej jeden produkt wirtualny, to od razu oznacz to zamówienie jako 'Zrealizowane'”.
Oto ten kod:
add_action( 'woocommerce_payment_complete', 'auto_complete_paid_virtual_orders_stein_style', 20, 1 );
function auto_complete_paid_virtual_orders_stein_style( $order_id ) {
if ( ! $order_id ) {
return;
}
$order = wc_get_order( $order_id );
if ( ! $order ) {
return;
}
if ( $order->has_status( array( 'completed', 'failed', 'cancelled', 'refunded' ) ) ) {
return;
}
$has_virtual_product = false;
foreach ( $order->get_items() as $item ) {
$product = $item->get_product();
if ( $product && $product->is_virtual() ) {
$has_virtual_product = true;
break;
}
}
if ( $has_virtual_product ) {
$order->update_status( 'completed', 'Automatyczne ukończenie (produkt wirtualny).' );
}
}
Gdzie wkleić ten kod? (WAŻNE!)
Masz dwie główne opcje, ale jedna jest ZDECYDOWANIE LEPSZA:
- NAJLEPSZA OPCJA: Plik
functions.php
Twojego motywu potomnego (child theme). Jeśli nie używasz motywu potomnego, to najwyższy czas zacząć! Serio. Dzięki temu Twoje modyfikacje (jak ten kod) nie znikną po aktualizacji głównego motywu. Jak nie wiesz, o co chodzi, wygooglaj „WordPress child theme” – to podstawa. - OPCJA DLA OPORNYCH (albo mniej technicznych): Użyj wtyczki typu „Code Snippets”. Pozwala ona dodawać takie kawałki kodu PHP przez panel WordPressa, bez grzebania w plikach motywu. To bezpieczniejsze, jeśli nie czujesz się pewnie edytując pliki
.php
.
PAMIĘTAJ! Zanim cokolwiek dodasz/zmienisz w kodzie strony, ZRÓB PEŁNĄ KOPIĘ ZAPASOWĄ (pliki + baza danych)! Jak coś pójdzie nie tak, będziesz miał/miała do czego wrócić.
Co ten kod tak naprawdę robi?
W skrócie:
add_action( 'woocommerce_payment_complete', ... )
: Mówi WordPressowi, żeby uruchomił naszą funkcję (auto_complete_paid_virtual_orders_stein_style
) za każdym razem, gdy WooCommerce zarejestruje udaną płatność.function auto_complete_paid_virtual_orders_stein_style( $order_id )
: To nasza funkcja, która dostaje ID zamówienia, za które właśnie zapłacono.$order = wc_get_order( $order_id );
: Pobieramy szczegóły tego zamówienia.if ( $order->has_status(...) )
: Sprawdzamy, czy zamówienie nie ma już jakiegoś „końcowego” statusu, żeby niepotrzebnie nie mieszać.foreach ( $order->get_items() as $item )
: Przeglądamy wszystkie produkty w tym zamówieniu.if ( $product && $product->is_virtual() )
: Sprawdzamy, czy dany produkt jest oznaczony jako „Wirtualny”.if ( $has_virtual_product )
: Jeśli znaleźliśmy w zamówieniu chociaż jeden produkt wirtualny…$order->update_status( 'completed', ... );
: …tu zmieniamy status całego zamówienia na „completed” (Zrealizowane) i dodajemy małą notatkę dla admina.
Na co uważać?
- Testuj! Po dodaniu kodu zrób testowe zamówienie z produktem wirtualnym i zapłać za nie (możesz użyć np. płatności „Przelew bankowy” i ręcznie ją potem zatwierdzić, albo jeśli masz bramkę płatności w trybie testowym). Sprawdź, czy status zmienił się na „Zrealizowane”.
- Konflikty: Teoretycznie ten kod jest prosty i nie powinien gryźć się z innymi wtyczkami, ale nigdy nic nie wiadomo. Jeśli po dodaniu kodu coś dziwnego zacznie się dziać z zamówieniami, to pierwszą rzeczą do sprawdzenia jest wyłączenie tego snippetu.
- Tylko wirtualne: Pamiętaj, ten kod działa tylko wtedy, gdy w zamówieniu jest przynajmniej jeden produkt oznaczony jako wirtualny. Jeśli zamówienie zawiera tylko produkty fizyczne, nic się nie zmieni.
I tyle! Kilka linijek kodu i masz problem z głowy. Koniec z ręcznym przeklikiwaniem statusów dla e-booków czy kursów. Automatyzacja w WooCommerce potrafi być prosta, jeśli wiesz, gdzie szukać (albo masz kogoś, kto Ci podpowie 😉).
Więc śmiało, zrób backup, dodaj kod (najlepiej do motywu potomnego!) i ciesz się zaoszczędzonym czasem. Proste? No pewnie! Daj znać, czy zadziałało!
Dołącz do Przystani Specek – miejsca, gdzie kobiety uczą się budować własne strony, sklepy, platformy kursowe i marki online - bez stresu, w zgodzie z sobą, ze wsparciem mentorki i cudownej społeczności innych Specek.👉 Kliknij i wejdź na pokład