Em determinado caso, tive que forçar o WooCommerce a abater o produto do estoque ao finalizar a compra, independentemente do status do pagamento.
Nesse caso, toda compra abate do estoque e o cliente precisa reabastecer o estoque de compras canceladas manualmente.
Utilizei esse código abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/** * Auto reduce WooCommerce order stock at checkout. * Add to theme functions.php file */ add_action( 'woocommerce_thankyou', 'woocommerce_reduce_order_stock' ); function woocommerce_reduce_order_stock( $order_id ) { global $woocommerce; if ( !$order_id ) return; $order = new WC_Order( $order_id ); $order->reduce_order_stock(); } |
Depois disso é necessário alterar a função padrão do WooCommerce para que quando o pagamento for realizado, não abata novamente do estoque.
1 |
add_filter( 'woocommerce_payment_complete_reduce_order_stock', '__return_false' ); |
Como estamos reduzindo o estoque independentemente do status da compra, precisamos então colocar de volta no estoque os produtos de compras que são canceladas. Para isso podemos utilizar o plugin WooCommerce Auto Restore Stock.
Essa solução não é ideal para todas as lojas. Isso depende muito do modo como o lojista controla seu estoque.
[Atualização]
Algumas pessoas tem perguntado como reduzir o estoque no momento que o produto é adicionado ao carrinho. Nesse caso, recomendo dar uma olhada nos plugins abaixo. Lembrando que um sacana pode colocar vários produtos no carrinho e aí você ficará sem estoque por alguns minutos.
WooCommerce Cart Stock Reducer
WooCommerce RedCart – Reduce stock on in-cart items
Funciona no woocommerce 2.3?
Funciona sim.
Aquela opção do Woocommerce de “Manter Estoque” não algo parecido?
Obrigado
Maurício.
A descrição dessa função da documentação, não me esclareceu em que momento o produto sai do estoque, eu acho que é quando a compra é finalizada, mas o pagamento ainda está pendente. Aí o WooCommerce vai esperar X minutos pelo pagamento.
No caso do Brasil e do PagSeguro, isso pode demorar DIAS, por isso acho que não atende a necessidade.
Eu nunca testei.
Olá Fagner. Estou testando sua solução, mas não tenho encontrado resultado.
Preciso que seja reduzido do estoque no momento que o produto for incluído no carrinho. É possível?
Marcio. É possível sim, mas aí não é mais esse código. Procure por um hook que seja disparado quando coloca o item no carrinho, mas nesse caso você terá o desafio de colocar novamente esse item no estoque, se a pessoa não finalizar a compra em X minutos.
Dá uma olhada nesses plugins abaixo, que podem resolver seu problema, mas eu nunca utilizei nenhum dos dois:
Fagner em qual arquivo eu devo colocar o código add_filter( ‘woocommerce_payment_complete_reduce_order_stock’, ‘__return_false’ );
Felipe. Coloque esse código no arquivo functions.php do seu tema. Pode colocar no final do arquivo.
Para os métodos de Depósito Bancário (nativo Woocommerce) e Boleto Bancário (plugin do Cláudio Sanches), o estoque está sendo diminuído no momento que o pedido é feito.. É possível ao invés disso, diminuir o estoque no momento que eu altero o pedido pra Processado ?
Você conseguiu algo quanto a isso ?
Muito obrigado, estava procurando uma correção para isso, já que ter o risco de realizar uma venda e não ter estoque é algo sério.
Funcionou perfeitamente!
Valeu Marquezi.
Olá Fagner. Estou tentando usar seu código, mas por algum motivo não está funcionando.
Quando eu concluo a compra, o pedido é gerado e aparece na lista do administrador, mas nenhuma nota de pedido é gerada, e o estoque ainda permanece inalterado.
Eu sou leigo em programação, mas acredito que é porque no meu site não é apresentado a página pós-compra (woocommerce_thankyou).
Como posso alterar para que quando a pessoa clique no botão “Realizar Pagamento” a função seja ativada?
Márcio, qual plugin você está usando para pagamento?
Uso o pagseguro como pagamento.
Fagner, como resolver este problema?
“desculpe nenhum produto atende sua seleção wordpress ”
Isso acontece na hora em que vou selecionar alguma variação do produto, no caso “tamanhos”. Na hora de selecionar P, M, ou G, aparece essa notificação acima.
É como se eu não tivesse ativado o gerenciamento do estoque e colocado os valores devidos, mas esta tudo ok, nao sei realmente o pq dessa mensagem.
Funcionou perfeitamente para reduzir o estoque no momento do pedido, dessa forma mesmo um pagamento por boleto já reduz do estoque.
Porém para retorno do estoque não funcionou muito bem, pois nesse caso o pedido fica como “Pagamento pendente”, e ao alterar desse status para cancelado não retorna o produto ao estoque, acredito ser porque o woocommerce por padrão não teria baixado estoque nesse momento.
Existe alguma forma de retornar para o estoque nesses casos?
Obrigado
Vitor
Você instalou esse plugin também (https://wordpress.org/plugins/woocommerce-auto-restore-stock/)? Veja que no post recomendamos esse plugin para voltar o produto para o estoque depois de cancelado o pedido.
Booa noite, ele não altera o numero de estoque, faço a compra, mas continue o mesmo número de estoque, mas ele trava(no sentido de não deixar seguir, até aí está trabalhando certo) quando vou comprar mais produtos além da quantidade de estoque… mas a quantidade de estoque não cai.
Pingback: Reduzir estoque de produtos no Woo Commerce com Pagseguro
Fagner, funcionou perfeitamente para PagSeguro e MercadoPago, porém tenho também a opção de Depósito Bancário (Nativo do WordPress) e nesta opção o produto é baixado 2x do estoque mesmo adicionando a função de não baixar novamente quando o pagamento é realizado.
Saberia me informar se existe alguma outra função para resolver isso? Obrigado.
Estou com esse mesmo problema.. conseguiu uma solução?
Ótimo ! Tem como fazer isso só se o pagamento for boleto do pagseguro ?