Como concluir automaticamente os pedidos do WooCommerce quando eles forem para o status de processamento

Publicados: 2019-04-06

Todo site de comércio eletrônico requer rastreamento e gerenciamento de pedidos, o que pode ser uma tarefa bastante difícil para o administrador, considerando o número de pedidos que um site de comércio eletrônico de alto tráfego recebe por dia. Quando se trata de WooCommerce, um pedido é criado assim que o processo de Checkout é concluído (confira o fluxo de status do pedido do WooCommerce abaixo).

De acordo com onde o pedido está na cadeia de pagamento à entrega, ele recebe um status. Esses status são definidos e/ou alterados pelo WooCommerce, pelo Gateway de pagamento e pelo proprietário/administrador da loja, dependendo de onde o pedido se encontra.

Antes de dar uma olhada no fluxo de pedidos no WooCommerce, vamos definir qual é o status do pedido no Woocommerce para o benefício dos novatos.

O que é o status do pedido no WooCommerce?

O status do pedido é uma representação do estado atual em que um pedido feito pelo cliente se encontra . O status do pedido no Woocommerce muda à medida que o pedido é processado até o estágio de entrega ou reembolso no caso de haver um problema com o produto/serviço e onde o proprietário da loja concordou em reembolsar o cliente. Por exemplo, quando um cliente faz um pedido de um determinado produto, imediatamente será definido o próximo status do pedido na sequência, que é o “Pagamento pendente”. O pagamento pendente é definido por padrão no Woocommerce.

Agora, vamos dar uma olhada no fluxograma para melhor compreensão.

Fluxograma de status do pedido do Woocommerce

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

Conforme ilustrado, após o pagamento de um pedido ser concluído com sucesso, seu status é definido como “Processando” até que o proprietário da loja o altere manualmente para “Concluído”. Esta é uma tarefa de sobrecarga para o dono da loja ou administrador, especialmente nos casos em que o volume de vendas é alto. Uma maneira de tornar esse processo eficiente é concluir automaticamente os pedidos do WooCommerce quando eles forem para o status de processamento. Vamos ver como podemos fazer isso usando o trecho de código.

Lista completa do status do pedido no WooCommerce

  • Pagamento pendente: Isso aparece por padrão quando o pedido foi feito, mas nenhum pagamento foi feito.
  • Falha: Isso indica que o pagamento não foi processado e foi rejeitado.
  • Processando: Isso indica que o pagamento passou e foi recebido pelos lojistas e agora pode ser processado para envio e entrega.
  • Concluído: Isso indica que tudo correu bem e o pedido agora foi atendido e concluído.
  • Em espera : Isso indica um estado em que o pedido requer confirmação do proprietário da loja.
  • Cancelado : Um status de pedido “Cancelado” não requer nenhuma ação adicional. O cancelamento pode ser do administrador ou do cliente em algum momento.
  • Reembolsado: o pedido foi reembolsado, nenhuma ação adicional é necessária

Agora que entendemos melhor o que é o status do pedido e sua função, vamos ver por que pode ser uma boa ideia atualizá-lo.

Defina automaticamente o status do pedido do WooCommerce como Concluído com base no método de pagamento

Na maioria dos casos, você precisaria fazer isso somente após o pagamento ter sido feito com sucesso, e isso só é possível quando o usuário não tiver selecionado a opção Pagamento na Entrega. O código abaixo, quando inserido no arquivo functions.php do seu tema filho, automaticamente definirá o status do pedido como Concluído sempre que o pagamento for efetuado com sucesso. Assim, em todos os casos, exceto quando o usuário selecionar a opção Pagamento na Entrega, o status do pedido será alterado automaticamente para Concluído.

 add_action('woocommerce_order_status_changed', 'ts_auto_complete_by_payment_method');

função ts_auto_complete_by_payment_method($order_id)
{
  
  if (! $order_id) {
        Retorna;
  }

  global $produto;
  $pedido = wc_get_order( $pedido_id);
  
  if ($order->data['status'] == 'processing') {
        $payment_method=$order->get_payment_method();
        if ($payment_method!="cod")
        {
            $order->update_status( 'concluído');
        }
      
  }
  
}

Aqui, você usará o gancho woocommerce_order_status_changed para chamar uma função quando o status de um pedido for alterado. Após verificar se a encomenda está em estado de Processamento, apenas se a forma de pagamento não for Contra-Reembolso, o estado da encomenda será alterado para Concluído . O WooCommerce tem quatro métodos de pagamento padrão, a saber. Transferência Bancária Direta (bacs), Pagamentos por Cheque (cheque), Dinheiro na Entrega (cod) e PayPal (paypal). Dependendo do método de pagamento para o qual você está especificando a condição, você precisará usar o ID apropriado, por exemplo, “bacs”, “cheque”, “cod”, “paypal”.

Defina automaticamente o status do pedido WooCommerce como Concluído para produtos virtuais

Outro caso em que você deseja que o status do pedido seja concluído automaticamente é quando o produto ou os produtos no pedido são produtos virtuais. Produtos virtuais são produtos que não são tangíveis ou podem ser baixados. Um exemplo disso seria uma assinatura ou cupom de membro da loja que oferece descontos para quem comprou a assinatura.

automatically Complete WooCommerce orders when they go to the Processing status - Virtual Product Example - Store Membership
Exemplo de um produto virtual

Uma assinatura de associação à loja pode não ter um formulário tangível, mas sim uma data de expiração. Produtos para download, como softwares ou até mesmo ingressos eletrônicos de cinema, também são produtos virtuais, pois não possuem presença ou forma offline. Com a maioria dos produtos virtuais, nunca há uma opção de “Cash-on-Delivery”. Os pagamentos são feitos na hora e, portanto, seria seguro não incluir a condição de verificação dos métodos de pagamento utilizados, mas apenas adicionar uma condição para verificar se todos os produtos do pedido são produtos virtuais.

 add_action('woocommerce_order_status_changed', 'ts_auto_complete_virtual');

função ts_auto_complete_virtual($order_id)
{
  
  if (! $order_id) {
        Retorna;
  }
  
  global $produto;
  $pedido = wc_get_order( $pedido_id);
  
  if ($order->data['status'] == 'processing') {
    
    $virtual_order = null;

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

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

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

          $_produto = $pedido->get_product_from_item( $item);

          if (! $_product->is_virtual()) {
            // uma vez que encontramos um produto não virtual, sai do loop
            $virtual_order = false;
            parar;
          } 
          senão {
            $virtual_order = true;
          }
       }
     }
   }

    // se todos forem produtos virtuais, marca como concluído
    if ( $virtual_order ) {
      $order->update_status( 'concluído');
    }
  }	
}

Aqui, usamos o mesmo gancho para chamar nossa função ts_auto_complete_virtual . Depois de verificar se o pedido está em status de Processamento, você precisa passar por cada item do pedido para ver se é um produto virtual.

Conclusão

Um pedido típico do Woocommerce tem muitos itens associados a ele, como produtos, frete, taxas etc. Aqui, line_item se refere ao produto. Apenas os produtos precisam ser buscados um a um para verificar se são virtuais. Se mesmo um item não for um produto virtual, o status do pedido não será marcado como Concluído.

Dependendo dos seus requisitos, no entanto, e usando o primeiro snippet de código desta postagem, você pode adicionar mais condições para marcar o status do pedido como Concluído. Por exemplo, se você deseja marcar o Status do pedido como Concluído mesmo para produtos não virtuais (se o pagamento desses produtos for feito), você pode fazê-lo adicionando uma verificação na forma de pagamento depois de verificar se é um virtual produtos. Por meio desse trecho de código, no entanto, o status do pedido será definido como Concluído somente se todos os produtos do pedido forem produtos virtuais.