FernandoAcosta.Netdocs

Validar estoque na página de pagamento

2 min de leituraAtualizado há 5 dias

A validação de estoque na página de pagamento resolve um caso específico: o cliente atrasa o pagamento de um pedido pendente, o produto vende pra outra pessoa nesse meio tempo, e quando o cliente original abre o link de pagamento, ele tenta pagar por algo que não existe mais.

Quando essa opção está ativa, o plugin checa o estoque imediatamente antes do pagamento ser processado. Se o produto saiu do estoque, o pagamento é bloqueado e uma mensagem é exibida ao cliente.

Quando vale ativar

Faz mais sentido quando você tem prazos de cancelamento longos. Se o boleto cancela só em 3 dias, há uma janela enorme em que o estoque pode ter mudado. A validação fecha essa brecha.

Faz menos sentido se todos os seus prazos de cancelamento são curtos (Pix em 5 minutos, cartão em 30) — nesse cenário o cancelamento automático já cobre o caso.

Por padrão essa opção fica desligada

A própria descrição na UI deixa claro: "Por padrão, isso não acontece." Ative explicitamente quando precisar.

Como ativar

  1. Vá em WooCommerce → Configurações → Pagamento.
  2. Role até a seção Controle avançado de estoque.
  3. Marque Validar estoque na página de pagamento.
  4. Salve.

Como funciona por dentro

A validação roda no hook woocommerce_before_pay_action, que dispara quando o cliente confirma o pagamento de um pedido na URL /checkout/order-pay/.

O plugin pula a checagem em três casos:

  • O pedido já teve estoque reduzido anteriormente (_reduced_stock presente).
  • O produto não tem gestão de estoque ativada.
  • O produto não exige envio (produto virtual sem necessidade de estoque físico).

Pra cada item elegível, ele compara a quantidade pedida com o estoque atual. Se a quantidade pedida supera o disponível, o pagamento é cancelado e uma mensagem é exibida ao cliente.

Mensagem padrão

A mensagem padrão menciona o produto e a quantidade indisponível. Você pode customizá-la com o filtro wcsrm_not_enough_stock_message:

add_filter( 'wcsrm_not_enough_stock_message', function( $message, $product, $item, $order ) {
    return sprintf(
        'Desculpe! O produto "%s" não está mais disponível na quantidade pedida (%d). Entre em contato com a loja.',
        $product->get_name(),
        $item->get_quantity()
    );
}, 10, 4 );

Esse snippet vai num plugin de funções customizadas ou no functions.php do tema filho. Mais exemplos em Personalizando o plugin.

E se o cliente fechou o navegador no meio?

A validação só dispara no momento do pagamento. Se o cliente abandona a página antes de clicar em "pagar", o pedido continua pendente até ser cancelado pelo prazo configurado em Cancelamento por método de pagamento ou Cancelamento por dias.

Foi útil?