Come completare automaticamente gli ordini WooCommerce quando passano allo stato In elaborazione

Pubblicato: 2019-04-06

Ogni sito di e-commerce richiede il monitoraggio e la gestione degli ordini che possono essere un compito piuttosto arduo per l'amministratore, considerando il numero di ordini che un sito Web di e-commerce medio ad alto traffico riceve ogni giorno. Quando si tratta di WooCommerce, un ordine viene creato non appena il processo di pagamento è completato (controlla il flusso di stato dell'ordine WooCommerce di seguito).

A seconda della posizione in cui l'ordine si trova nella catena dal pagamento alla consegna, gli viene assegnato uno stato. Questi stati vengono impostati e/o modificati da WooCommerce, dal gateway di pagamento e dal proprietario/amministratore del negozio a seconda di dove si trova l'ordine.

Prima di dare un'occhiata al flusso degli ordini in WooCommerce, definiamo quale stato dell'ordine è in Woocommerce a beneficio dei neofiti.

Qual è lo stato dell'ordine in WooCommerce?

Lo stato dell'ordine è una rappresentazione dello stato corrente in cui si trova un ordine effettuato dal cliente . Lo stato dell'ordine in Woocommerce cambia man mano che l'ordine viene elaborato fino alla fase di consegna o rimborso nel caso in cui si verifichi un problema con il prodotto/servizi e in cui il proprietario del negozio abbia acconsentito al rimborso al cliente. Ad esempio, quando un cliente effettua un ordine su un determinato prodotto, verrà immediatamente impostato lo stato dell'ordine successivo nella sequenza, ovvero il "Pagamento in sospeso". Il pagamento in sospeso è impostato di default in Woocommerce.

Ora, diamo un'occhiata al diagramma di flusso per una migliore comprensione.

Diagramma di flusso dello stato dell'ordine Woocommerce

Woocommerce Order Status Flow Chart
Fonte: https://docs.woocommerce.com/document/managing-orders/

Come illustrato, dopo che il pagamento di un ordine è stato completato con successo, il suo stato viene impostato su "In elaborazione" fino a quando il proprietario del negozio non lo modifica manualmente in "Completato". Si tratta di un'attività a carico del proprietario del negozio o dell'amministratore, soprattutto nei casi in cui il volume delle vendite è elevato. Un modo per rendere efficiente questo processo è completare automaticamente gli ordini WooCommerce quando passano allo stato Elaborazione. Vediamo come possiamo farlo usando lo snippet di codice.

Elenco completo dello stato dell'ordine in WooCommerce

  • Pagamento in sospeso: si presenta per impostazione predefinita quando l'ordine è stato effettuato ma non è stato effettuato alcun pagamento.
  • Non riuscito: indica che il pagamento non è andato a buon fine ed è stato rifiutato.
  • Elaborazione: indica che il pagamento è andato a buon fine ed è stato ricevuto dai proprietari dei negozi e ora può essere elaborato per la spedizione e la consegna.
  • Completato: indica che tutto è andato bene e che l'ordine è stato evaso e completato.
  • In attesa : indica uno stato in cui l'ordine richiede la conferma da parte del proprietario del negozio.
  • Annullato : lo stato dell'ordine "Annullato" non richiede ulteriori azioni. La cancellazione può provenire dall'amministratore o dal cliente a un certo punto.
  • Rimborsato: L'ordine è stato rimborsato, non sono necessarie ulteriori azioni

Ora che abbiamo capito meglio cos'è lo stato dell'ordine e la sua funzione, vediamo perché può essere una buona idea aggiornarlo.

Imposta automaticamente lo stato dell'ordine WooCommerce come Completato in base al metodo di pagamento

Nella maggior parte dei casi, dovresti farlo solo dopo che il pagamento è stato effettuato con successo, e questo è possibile solo quando l'utente non ha selezionato l'opzione Contrassegno. Il codice sottostante, quando inserito nel file functions.php del tuo tema figlio, imposterà automaticamente lo stato dell'ordine come Completato ogni volta che un pagamento è stato effettuato con successo. Pertanto, in tutti i casi, tranne quando l'utente seleziona l'opzione Contrassegno, lo stato dell'ordine cambierà automaticamente in Completato.

 add_action('woocommerce_order_status_changed', 'ts_auto_complete_by_payment_method');

funzione ts_auto_complete_by_payment_method($ order_id)
{
  
  se ( ! $ order_id ) {
        Restituzione;
  }

  prodotto $ globale;
  $ordine = wc_get_ordine($ordine_id);
  
  if ($ordine->dati['stato'] == 'elaborazione') {
        $payment_method=$ordine->get_payment_method();
        se ($ metodo_pagamento!="cod")
        {
            $ordine->aggiornamento_stato('completato');
        }
      
  }
  
}

Qui utilizzerai l'hook woocommerce_order_status_changed per chiamare una funzione quando lo stato di un ordine viene modificato. Dopo aver verificato se l'ordine ha lo stato In elaborazione, solo se il metodo di pagamento non è Contrassegno, lo stato dell'ordine verrà modificato in Completato . WooCommerce ha quattro metodi di pagamento predefiniti, vale a dire. Bonifico Bancario Diretto (bacs), pagamenti con assegno (assegno), contrassegno (cod) e PayPal (paypal). A seconda del metodo di pagamento per il quale stai specificando la condizione, dovrai utilizzare l' ID appropriato, ad esempio "bacs", "cheque", "cod", "paypal".

Imposta automaticamente lo stato dell'ordine WooCommerce come Completato per i prodotti virtuali

Un altro caso in cui si desidera che lo stato dell'ordine venga completato automaticamente è quando il prodotto o i prodotti nell'ordine sono prodotti virtuali. I prodotti virtuali sono prodotti che non sono tangibili o sono scaricabili. Un esempio potrebbe essere un abbonamento a un negozio o un coupon che offre sconti a coloro che hanno acquistato l'abbonamento.

automatically Complete WooCommerce orders when they go to the Processing status - Virtual Product Example - Store Membership
Esempio di un prodotto virtuale

Un abbonamento a un negozio potrebbe non avere una forma tangibile ma una data di scadenza. Anche i prodotti scaricabili come software o biglietti elettronici per il cinema sono prodotti virtuali, poiché non hanno una presenza o un modulo offline. Con la maggior parte dei prodotti virtuali, non c'è mai un'opzione di "contrassegno". I pagamenti vengono effettuati in loco, quindi sarebbe sicuro non includere la condizione di controllo dei metodi di pagamento utilizzati, ma aggiungere solo una condizione per verificare se tutti i prodotti nell'ordine sono prodotti virtuali.

 add_action('woocommerce_order_status_changed', 'ts_auto_complete_virtual');

funzione ts_auto_complete_virtual($order_id)
{
  
  se ( ! $ order_id ) {
        Restituzione;
  }
  
  prodotto $ globale;
  $ordine = wc_get_ordine($ordine_id);
  
  if ($ordine->dati['stato'] == 'elaborazione') {
    
    $ ordine_virtuale = nullo;

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

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

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

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

          se ( ! $_prodotto->è_virtuale() ) {
            // una volta trovato un prodotto non virtuale, esci dal ciclo
            $ordine_virtuale = falso;
            rompere;
          } 
          altro {
            $ordine_virtuale = vero;
          }
       }
     }
   }

    // se sono tutti prodotti virtuali, contrassegnali come completati
    se ($ordine_virtuale) {
      $ordine->aggiornamento_stato('completato');
    }
  }	
}

Qui usiamo lo stesso hook per chiamare la nostra funzione ts_auto_complete_virtual . Dopo aver verificato se l'ordine è in uno stato In elaborazione, è necessario esaminare ogni articolo nell'ordine per vedere se si tratta di un prodotto virtuale.

Conclusione

Un tipico ordine Woocommerce ha molti articoli ad esso associati come prodotti, spedizione, commissioni ecc. Qui, line_item si riferisce al prodotto. Solo i prodotti devono essere prelevati uno per uno per verificare se sono virtuali. Se anche un solo articolo non è un prodotto virtuale, lo stato dell'ordine non verrà contrassegnato come Completato.

A seconda delle tue esigenze, tuttavia, e utilizzando il primo snippet di codice in questo post, puoi aggiungere altre condizioni per contrassegnare lo stato dell'ordine come Completato. Ad esempio, se desideri contrassegnare lo stato dell'ordine come completato anche per prodotti non virtuali (se il pagamento per questi prodotti è stato effettuato), puoi farlo aggiungendo un segno di spunta sul metodo di pagamento dopo che ha verificato se si tratta di un Prodotto. Tramite questo snippet di codice, invece, lo stato dell'ordine verrà impostato come Completato solo se tutti i prodotti nell'ordine sono prodotti virtuali.