Embora o WooCommerce inclua vários status de pedidos diferentes, eles podem não se adequar ao fluxo da sua loja. Com o WooCommerce padrão, você pode marcar pedidos com um dos seguintes status:
- Pagamento Pendente
- Em espera
- Em processamento
- Concluído
- Reemvolsado
- Cancelado
- MalSucedido
No entanto, algumas lojas precisam de mais status de pedidos, como "Aguardando envio", "em produção" ou outros para atender às suas necessidades de atendimento. Você pode adicioná-los facilmente com um pouco de código personalizado.
Nesse post vamos demostrar como adicionar um status de pedido personalizado do WooCommerce e remover status de pedido não utilizados.
Adicionando um status de pedido personalizado WooCommerce #
Não quer adicionar código personalizado para isso? Experimente o plugin WooCommerce Order Status Manager.
No WooCommerce 2.1 ou anterior, os status dos pedidos eram armazenados como uma taxonomia para o tipo de postagem “Pedido”.
As taxonomias do WordPress são categorizações, como categorias de postagem e tags. No entanto, o WooCommerce 2.2 exigiu uma alteração na estrutura do pedido para oferecer suporte a reembolsos parciais e automáticos do administrador do WooCommerce. Os status do pedido agora são salvos como um status de postagem personalizado , assim como rascunho , agendado ou publicado para postagens.
Adicionar um status de postagem personalizado exige um pouco mais de código agora, mas isso é realmente um pouco mais direto do ponto de vista do desenvolvimento (você não precisa executar o código uma vez e excluí-lo). Certifique-se de adicionar corretamente este código ao seu site—eu recomendo criar um plugin ou usar o plugin Code Snippets.
Vamos começar com o trecho completo para vocês impacientes. smile Isso adicionará um status de pedido “Aguardando envio” à sua loja. Em seguida, vou dividi-lo para explicar o que cada parte deste trecho faz.
Explicação: o que esse código faz? #
Vamos começar com a primeira função neste código:
// Registra um novo status
function register_waiting_shipment_order_status() {
register_post_status( 'wc-aguardando-envio', array(
'label' => 'Aguardando envio',
'público' => verdadeiro,
'exclude_from_search' => false,
'show_in_admin_all_list' => verdadeiro,
'show_in_admin_status_list' => verdadeiro,
'label_count' => _n_noop( 'Aguardando envio (%s) ', 'Aguardando envio (%s) ' )
) );
}
add_action( 'init', 'register_waiting_shipment_order_status' );
Esta função está registrando nosso status personalizado como um status de postagem no WordPress. Você pode renomear a função para atender às suas necessidades, mas vamos criar um status de pedido "Aguardando envio", então o chamamos register_awaiting_shipment_order_status() para refletir isso.
Em seguida, construímos o status da postagem usando a função do WordPress register_post_status() . Observe que a primeira coisa nesta função é o slug para o status do nosso pedido, prefixado por “wc-” para “WooCommerce”. Se você quiser um nome diferente para o status do seu pedido, altere-o para um slug hifenizado, todo em letras minúsculas, como wc-building ou wc-packing-order.
Seu slug de status personalizado pode ter no máximo 20 caracteres , incluindo traços (conforme o codex em register_post_status ), portanto, você precisa estar ciente disso ao criar seu próprio slug.
Em seguida, criamos um array , que é um conjunto de dados que define nosso status de postagem personalizado. O rótulo é o que será exibido, para que você possa alterá-lo para o nome exato do status do seu pedido. Você também desejará inserir isso em em label_count vez de "Aguardando envio", mas deixe o restante desse array inalterado.
Por fim, a ação no final executa essa função e adiciona esse status de pedido ao WordPress como nosso status de postagem personalizado.
Agora vamos falar sobre a segunda parte:
// Adiciona à lista de status do pedido de WC
function add_awaiting_shipment_to_order_statuses( $order_statuses ) {
$new_order_statuses = array();
// adiciona o novo status do pedido após o processamento
foreach ( $order_statuses as $key => $status) {
$new_order_statuses[ $key ] = $status;
if ('wc-processing' === $key) {
$new_order_statuses['wc-awaiting-shipment'] = 'Aguardando envio';
}
}
return $new_order_statuses;
}
add_filter( 'wc_order_statuses', 'add_awaiting_shipment_to_order_statuses' );
A add_awaiting_shipment_to_order_statuses() função adicionará esse novo status de postagem personalizado à lista de status de pedidos disponíveis nas páginas "Pedidos" e "Editar pedidos" do WooCommerce para que possamos usá-lo. Queremos passar os status de pedidos atuais para que possamos passar por eles e inserir nosso status de pedido na lista onde desejamos.
Criamos primeiro um array para nossos novos status de pedido, que será nosso produto final. Em seguida, passaremos por todos os status do pedido e inseriremos o nosso próprio, de modo que, no momento em que inserirmos os novos status do pedido na lista, o novo seja incluído.
O foreach loop aqui percorre a lista de status de pedidos atuais até encontrarmos o que queremos. Neste caso, vou inserir “Aguardando envio” após o status do pedido “Processando”. Isso é o que a if() peça está fazendo aqui – dizemos: "Se o status do pedido for ‘processando’, adicione ‘Aguardando envio’ aqui e continue passando pelos status do pedido".
Observe que uso o slug e o rótulo que criei na primeira função para adicionar esse status de pedido. Agora terei "Aguardando envio" exibido após "Processando" para meus pedidos:
Você pode inserir seu novo status após qualquer um dos status existentes; você pode encontrar uma lista deles aqui . Por exemplo, eu poderia ter procurado wc-pending e adicionado meu status depois disso.
É isso! Agora você pode adicionar seu próprio status e inseri-lo em qualquer lugar na lista de status do pedido.
Removendo o status de um pedido do WooCommerce
Se você deseja remover o status do seu pedido personalizado, basta remover este código do seu site. Se você estiver usando o plugin Code Snippets , você pode simplesmente desativar o snippet. Se você fizer isso, o status do seu pedido será padrão para "Pagamento pendente".
No entanto, os pedidos que usam seu novo status podem não aparecer na sua lista de pedidos quando o código é removido, pois estão usando um status de postagem não reconhecido. Eu recomendo alterar os status do pedido para um status principal antes de desativar ou remover este snippet. Os pedidos ainda existirão independentemente, e você poderá navegar até eles diretamente usando o ID da postagem, mas eles não serão reconhecidos na lista Pedidos sem esse código, a menos que usem um status de pedido principal.
Não vou falar sobre como remover nenhum dos status de pedidos principais, porque isso é uma péssima ideia. Mesmo que você ache que não pode usar nenhum deles, a maioria dos plugins (especialmente gateways de pagamento ou outros plugins vinculados a pedidos), espera que eles estejam lá.
Por exemplo, você pode achar que não precisará do status "Pagamento pendente", mas na verdade isso é usado pela maioria dos gateways como o status padrão do pedido até que um pagamento válido seja confirmado. Por exemplo, o PayPal ou outros gateways que usam IPNs para notificar seu site de que um pagamento foi concluído usam “Pagamento pendente”, então o status é atualizado para processamento assim que o pagamento é recebido. Para que muitas extensões funcionem corretamente, esses status principais devem estar todos disponíveis, mesmo que você não os use ativamente em seu ciclo de processamento.