Jak automatycznie uzupełniać zamówienia WooCommerce po przejściu do statusu Przetwarzanie

Opublikowany: 2019-04-06

Każda witryna e-commerce wymaga śledzenia i zarządzania zamówieniami, co może być dość zniechęcającym zadaniem dla administratora, biorąc pod uwagę liczbę zamówień, które dziennie otrzymuje przeciętna witryna e-commerce o dużym natężeniu ruchu. Jeśli chodzi o WooCommerce, zamówienie jest tworzone zaraz po zakończeniu procesu Checkout (sprawdź przepływ statusu zamówienia WooCommerce poniżej).

W zależności od tego, gdzie zamówienie znajduje się w łańcuchu od płatności do dostawy, otrzymuje status. Statusy te są ustawiane i/lub zmieniane przez WooCommerce, Bramkę Płatności oraz właściciela/administratora sklepu w zależności od tego, gdzie znajduje się zamówienie.

Zanim przyjrzymy się przepływowi zamówień w WooCommerce, zdefiniujmy status zamówienia w Woocommerce z korzyścią dla początkujących.

Jaki jest status zamówienia w WooCommerce?

Status zamówienia jest reprezentacją aktualnego stanu, w jakim znajduje się zamówienie złożone przez klienta . Status zamówienia w Woocommerce zmienia się w miarę przetwarzania zamówienia do etapu dostawy lub zwrotu pieniędzy w przypadku problemu z produktem/usługą i gdy właściciel sklepu zgodził się na zwrot pieniędzy klientowi. Przykładowo, gdy klient złoży zamówienie na określony produkt, od razu zostanie ustawiony kolejny status zamówienia w sekwencji, czyli „Oczekująca płatność”. Oczekująca płatność jest domyślnie ustawiona w Woocommerce.

Teraz spójrzmy na schemat blokowy, aby lepiej zrozumieć.

Wykres przepływu statusu zamówienia Woocommerce

Woocommerce Order Status Flow Chart
Źródło: https://docs.woocommerce.com/document/managing-orders/

Jak pokazano, po pomyślnym zrealizowaniu płatności za zamówienie jego status jest ustawiony na „Przetwarzanie”, dopóki właściciel sklepu nie zmieni go ręcznie na „Zakończone”. Jest to zadanie nadrzędne dla właściciela sklepu lub administratora, szczególnie w przypadkach, gdy wielkość sprzedaży jest duża. Jednym ze sposobów usprawnienia tego procesu jest automatyczne uzupełnianie zamówień WooCommerce po przejściu do statusu Przetwarzanie. Zobaczmy, jak możemy to zrobić za pomocą fragmentu kodu.

Pełna lista statusu zamówienia w WooCommerce

  • Oczekująca płatność: pojawia się domyślnie, gdy zamówienie zostało złożone, ale nie dokonano płatności.
  • Niepowodzenie: oznacza, że ​​płatność nie została zrealizowana i została odrzucona.
  • Przetwarzanie: Oznacza to, że płatność została zrealizowana i została odebrana przez właścicieli sklepów i można ją teraz przetworzyć w celu wysyłki i dostawy.
  • Ukończone: Oznacza to, że wszystko poszło dobrze, a zamówienie zostało już zrealizowane i zakończone.
  • Wstrzymane : wskazuje stan, w którym zamówienie wymaga potwierdzenia od właściciela sklepu.
  • Anulowane : status zamówienia „Anulowane” nie wymaga żadnych dalszych działań. W pewnym momencie anulowanie może pochodzić od administratora lub klienta.
  • Zwrócono: zamówienie zostało zwrócone, nie są wymagane żadne dalsze działania

Teraz, gdy lepiej rozumiemy, czym jest status zamówienia i jego funkcję, zobaczmy, dlaczego warto go zaktualizować.

Automatycznie ustaw status zamówienia WooCommerce jako Zakończone na podstawie metody płatności

W większości przypadków trzeba to zrobić dopiero po pomyślnym dokonaniu płatności, a jest to możliwe tylko wtedy, gdy użytkownik nie wybrał opcji za pobraniem. Poniższy kod, po wstawieniu do pliku functions.php Twojego motywu podrzędnego, automatycznie ustawi status zamówienia jako Zakończone za każdym razem, gdy płatność zostanie pomyślnie dokonana. Dlatego we wszystkich przypadkach, z wyjątkiem sytuacji, gdy użytkownik wybierze opcję Gotówka przy odbiorze, status zamówienia zmieni się automatycznie na Zakończone.

 add_action('woocommerce_order_status_changed', 'ts_auto_complete_by_payment_method');

funkcja ts_auto_complete_by_payment_method($order_id)
{
  
  if ( ! $ id_zamówienia ) {
        zwrócić;
  }

  globalny produkt;
  $zamówienie = wc_get_order( $order_id );
  
  if ($order->data['status'] == 'przetwarzanie') {
        $payment_method=$order->get_payment_method();
        if ($payment_method!="cod")
        {
            $order->update_status( 'zakończono' );
        }
      
  }
  
}

Tutaj użyjesz haka woocommerce_order_status_changed , aby wywołać funkcję, gdy zmieni się status zamówienia. Po sprawdzeniu, czy zamówienie ma status Przetwarzanie, tylko jeśli formą płatności nie jest Płatność przy odbiorze, status zamówienia zmieni się na Zrealizowane . WooCommerce ma cztery domyślne metody płatności, a mianowicie. Bezpośredni przelew bankowy (bacs), płatności czekiem (czek), za pobraniem (za pobraniem) i PayPal (paypal). W zależności od tego, jaką metodę płatności określasz, musisz użyć odpowiedniego identyfikatora , np. „bacs”, „czek”, „cod”, „paypal”.

Automatycznie ustaw status zamówienia WooCommerce jako Zakończone dla produktów wirtualnych

Innym przypadkiem, w którym chcesz, aby status zamówienia zakończył się automatycznie, jest sytuacja, gdy produkt lub produkty w zamówieniu są produktami wirtualnymi. Produkty wirtualne to produkty, które nie są namacalne lub można je pobrać. Przykładem może być subskrypcja członkostwa w sklepie lub kupon oferujący zniżki dla tych, którzy wykupili subskrypcję.

automatically Complete WooCommerce orders when they go to the Processing status - Virtual Product Example - Store Membership
Przykład produktu wirtualnego

Subskrypcja członkostwa w sklepie może nie mieć namacalnej formy, ale może mieć datę wygaśnięcia. Produkty do pobrania, takie jak oprogramowanie, a nawet elektroniczne bilety do kina, również są produktami wirtualnymi, ponieważ nie są dostępne w trybie offline ani w formie. W przypadku większości wirtualnych produktów nigdy nie ma opcji „za pobraniem”. Płatności dokonywane są na miejscu, dlatego bezpiecznie byłoby nie uwzględniać warunku sprawdzenia użytych metod płatności, a zamiast tego dodać tylko warunek, aby sprawdzić, czy wszystkie produkty w zamówieniu są produktami wirtualnymi.

 add_action('woocommerce_order_status_changed', 'ts_auto_complete_virtual');

funkcja ts_auto_complete_virtual($order_id)
{
  
  if ( ! $ id_zamówienia ) {
        zwrócić;
  }
  
  globalny produkt;
  $zamówienie = wc_get_order( $order_id );
  
  if ($order->data['status'] == 'przetwarzanie') {
    
    $virtual_order = null;

    if ( count( $order->get_items() ) > 0 ) {

      foreach( $order->get_items() as $item ) {

        if ( 'line_item' == $item['type'] ) {

          $_product = $order->get_product_from_item( $item );

          if ( ! $_product->is_virtual() ) {
            // gdy znajdziemy jeden niewirtualny produkt, wyrwij się z pętli
            $virtual_order = false;
            przerwanie;
          } 
          w przeciwnym razie {
            $virtual_order = prawda;
          }
       }
     }
   }

    // jeśli wszystkie są produktami wirtualnymi, oznacz jako zakończone
    if ( $wirtualne_zamówienie) {
      $order->update_status( 'zakończono' );
    }
  }	
}

Tutaj używamy tego samego haka do wywołania naszej funkcji ts_auto_complete_virtual . Po sprawdzeniu, czy zamówienie ma status Przetwarzanie, musisz przejrzeć każdą pozycję w zamówieniu, aby sprawdzić, czy jest to produkt wirtualny.

Wniosek

Typowe zamówienie Woocommerce ma wiele powiązanych z nim elementów, takich jak produkty, wysyłka, opłaty itp. Tutaj line_item odnosi się do produktu. Tylko produkty muszą być pobierane jeden po drugim, aby sprawdzić, czy są wirtualne. Jeśli choć jedna pozycja nie jest produktem wirtualnym, status zamówienia nie zostanie oznaczony jako Zakończone.

Jednak w zależności od wymagań i przy użyciu pierwszego fragmentu kodu w tym poście możesz dodać więcej warunków, aby oznaczyć status zamówienia jako Ukończone. Na przykład, jeśli chcesz oznaczyć status zamówienia jako zrealizowany nawet dla produktów niewirtualnych (jeśli płatność za te produkty została dokonana), możesz to zrobić, dodając czek do metody płatności po sprawdzeniu, czy jest to wirtualna produkt. Jednak za pomocą tego fragmentu kodu status zamówienia zostanie ustawiony jako Zakończone tylko wtedy, gdy wszystkie produkty w zamówieniu są produktami wirtualnymi.