Cum să finalizați automat comenzile WooCommerce atunci când acestea trec în starea de procesare
Publicat: 2019-04-06Fiecare site de comerț electronic necesită urmărirea și gestionarea comenzilor, ceea ce poate fi o sarcină destul de descurajantă pentru administrator, având în vedere numărul de comenzi pe care le primește zilnic un site de comerț electronic cu trafic ridicat. Când vine vorba de WooCommerce, o comandă este creată de îndată ce procesul de plată este finalizat (consultați fluxul de stare a comenzii WooCommerce de mai jos).
În funcție de locul în care se află comanda în lanțul de plată până la livrare, i se atribuie un statut. Aceste stări sunt setate și/sau modificate de WooCommerce, Gateway de plată și proprietarul/administratorul magazinului, în funcție de locul în care se află comanda.
Înainte de a arunca o privire asupra fluxului de comenzi în WooCommerce, să definim ce stare de comandă este în WooCommerce în beneficiul începătorilor.
Care este starea comenzii în WooCommerce?
Starea comenzii este o reprezentare a stării curente în care se află o comandă efectuată de client . Starea comenzii în Woocommerce se modifică pe măsură ce comanda este procesată până la etapa de livrare sau rambursare în cazul în care există o problemă cu produsul/serviciile și în care proprietarul magazinului a fost de acord să ramburseze clientului. De exemplu, atunci când un client plasează o comandă pentru un anumit produs, imediat va fi setată următoarea stare a comenzii din secvență, care este „Plată în așteptare”. Plata în așteptare este setată implicit în Woocommerce.
Acum, să aruncăm o privire asupra diagramei flux pentru o mai bună înțelegere.
Diagrama fluxului privind starea comenzii Woocommerce

După cum este ilustrat, după finalizarea cu succes a plății pentru o comandă, starea acesteia este setată la „Se procesează” până când proprietarul magazinului o schimbă manual în „Finalizat”. Aceasta este o sarcină generală pentru proprietarul magazinului sau administrator, mai ales în cazurile în care volumul vânzărilor este mare. O modalitate de a eficientiza acest proces este de a finaliza automat comenzile WooCommerce atunci când acestea trec în starea de procesare. Să vedem cum putem face asta folosind fragmentul de cod.
Lista completă a stării comenzii în WooCommerce
- Plată în așteptare: aceasta apare în mod implicit când comanda a fost plasată, dar nu a fost efectuată nicio plată.
- Eșuat: aceasta indică faptul că plata nu a fost finalizată și a fost respinsă.
- Procesare: aceasta indică faptul că plata a trecut și a fost primită de proprietarii magazinelor și că acum poate fi procesată pentru expediere și livrare.
- Finalizat: aceasta indică faptul că totul a decurs bine și că acum comanda a fost îndeplinită și finalizată.
- În așteptare : aceasta indică o stare în care comanda necesită confirmare din partea proprietarului magazinului.
- Anulat : starea unei comenzi „Anulată” nu necesită nicio acțiune suplimentară. Anularea poate fi fie de la administrator, fie de la client la un moment dat.
- Rambursat: Comanda a fost rambursată, nu este necesară nicio acțiune suplimentară
Acum că înțelegem mai bine ce este starea comenzii și funcția acesteia, să vedem de ce poate fi o idee bună să o actualizăm.
Setați automat starea comenzii WooCommerce ca Finalizată pe baza metodei de plată
În cele mai multe cazuri, ar trebui să faceți acest lucru numai după ce plata a fost efectuată cu succes, iar acest lucru este posibil numai atunci când utilizatorul nu a selectat opțiunea Ramburs la livrare. Codul de mai jos, atunci când este introdus în fișierul functions.php al temei copilului dvs., va seta automat starea comenzii ca Finalizată ori de câte ori o plată a fost efectuată cu succes. Prin urmare, în toate cazurile, cu excepția cazului în care utilizatorul selectează opțiunea Ramburs la livrare, starea comenzii se va schimba automat în Finalizată.
add_action('woocommerce_order_status_changed', 'ts_auto_complete_by_payment_method'); funcția ts_auto_complete_by_payment_method($order_id) { dacă ( ! $id_comanda ) { întoarcere; } global $produs; $comanda = wc_get_order( $comanda_comanda); if ($comanda->date['status'] == 'procesare') { $metoda_plata=$comanda->get_metoda_plata(); dacă ($payment_method!="cod") { $comanda->update_status('finalizat'); } } }

Aici, veți folosi hook-ul woocommerce_order_status_changed pentru a apela o funcție atunci când starea unei comenzi este schimbată. După verificarea dacă comanda are starea de Procesare, numai dacă metoda de plată nu este Ramburs la livrare, starea comenzii va fi schimbată în Finalizată . WooCommerce are patru metode de plată implicite, adică. Transfer bancar direct (bacs), plăți cu cec (cec), Ramburs la livrare (cod) și PayPal (paypal). În funcție de metoda de plată pentru care specificați condiția, va trebui să utilizați ID -ul corespunzător, de exemplu „bacs”, „cec”, „cod”, „paypal”.
Setați automat starea comenzii WooCommerce ca Finalizată pentru produsele virtuale
Un alt caz în care ați dori ca starea comenzii să se finalizeze automat este atunci când produsul sau produsele din comandă sunt produse virtuale. Produsele virtuale sunt produse care fie nu sunt tangibile, fie sunt descărcabile. Un exemplu în acest sens ar fi un abonament de membru al magazinului sau un cupon care oferă reduceri celor care au cumpărat abonamentul.

Un abonament de membru al magazinului poate să nu aibă o formă tangibilă, ci o dată de expirare. Produsele descărcabile, cum ar fi software-ul sau chiar biletele electronice de film, sunt și ele produse virtuale, deoarece nu au prezență sau formă offline. Cu majoritatea produselor virtuale, nu există niciodată o opțiune de „Ramburs la livrare”. Plățile se fac pe loc și, prin urmare, ar fi sigur să nu includeți condiția de verificare a metodelor de plată utilizate, ci să adăugați doar o condiție pentru a verifica dacă toate produsele din comandă sunt produse virtuale.
add_action('woocommerce_order_status_changed', 'ts_auto_complete_virtual'); funcția ts_auto_complete_virtual($order_id) { dacă ( ! $id_comanda ) { întoarcere; } global $produs; $comanda = wc_get_order( $comanda_comanda); if ($comanda->date['status'] == 'procesare') { $virtual_order = null; dacă ( count( $comanda->get_items() ) > 0 ) { foreach( $comanda->get_items() ca $articol ) { if ( 'element_linie' == $articol['tip'] ) { $_produs = $comanda->get_product_from_item( $articol ); dacă ( ! $_product->is_virtual() ) { // odată ce găsim un produs non-virtual, ieșim din buclă $virtual_order = false; pauză; } else { $virtual_order = adevărat; } } } } // dacă toate sunt produse virtuale, marcați ca finalizate dacă ($comandă_virtuală) { $comanda->update_status('finalizat'); } } }
Aici, folosim același cârlig pentru a apela funcția noastră ts_auto_complete_virtual . După ce verificați dacă comanda este într-o stare de procesare, trebuie să parcurgeți fiecare articol din comandă pentru a vedea dacă este un produs virtual.
Concluzie
O comandă tipică Woocommerce are o mulțime de articole asociate cu ea, cum ar fi produse, transport, taxe etc. Aici, line_item se referă la produs. Doar produsele trebuie preluate unul câte unul pentru a verifica dacă sunt virtuale. Dacă chiar și un articol nu este un produs virtual, starea comenzii nu va fi marcată ca finalizată.
Totuși, în funcție de cerințele dvs. și folosind primul fragment de cod din această postare, puteți adăuga mai multe condiții pentru a marca starea comenzii ca finalizată. De exemplu, dacă doriți să marcați starea comenzii ca finalizată chiar și pentru produse non-virtuale (dacă plata pentru aceste produse este efectuată), atunci puteți face acest lucru adăugând o verificare a metodei de plată după ce verifică dacă este vorba despre o versiune virtuală. produs. Prin acest fragment de cod, totuși, starea comenzii va fi setată ca Finalizată numai dacă toate produsele din comandă sunt produse virtuale.