FernandoAcosta.Netdocs

Status do pedido e cancelamento automático

2 min de leituraAtualizado há 5 dias

O plugin não dispara lembretes pra qualquer pedido. Só pra status de "boleto pendente" — e cancela tudo no momento que o pedido sai desse limbo.

Quando o lembrete é criado

O cron é agendado no hook woocommerce_thankyou, depois do checkout, se o pedido atende aos critérios:

  • Status é pending ou on-hold.
  • O método de pagamento tem dados de boleto disponíveis (gateway suportado ou customizado via filtro).

Se algum desses falhar, nenhum cron é criado e o pedido sai do radar do plugin.

Quando o lembrete dispara

Quando o cron agendado vence (após 24h, 48h, ou outro intervalo configurado), o plugin re-verifica:

  • Status do pedido continua pending ou on-hold?
  • O e-mail está habilitado em WooCommerce → Configurações → E-mails → Lembrete para pagamento de boleto?
  • O expiry_time do boleto (quando o gateway expõe) ainda não passou?

Se sim em todas, o e-mail é enviado e o evento é registrado na timeline.

Re-verificação no disparo

Esse passo evita um problema comum: pedidos que mudam de status entre o agendamento e o disparo (ex.: pago em 23h, lembrete agendado pra 24h). O cron não é cancelado, mas o disparo é abortado pela checagem de status.

Cancelamento automático

Mudança de status pra qualquer dos abaixo cancela todos os crons pendentes do pedido:

  • processing (pago, em processamento)
  • completed (pago e concluído)
  • cancelled (cancelado pelo cliente ou loja)

O cancelamento é registrado na timeline:

Eventos cancelados. Motivo: Mudança de status

Customizando os status válidos

Quer permitir lembretes em status custom (ex.: awaiting-shipping)? Use o filtro:

add_filter( 'wc_boleto_reminder_valid_order_statuses_for_reminder', function( $statuses ) {
    $statuses[] = 'wc-awaiting-shipit';
    return $statuses;
} );

Padrão: array( 'pending', 'on-hold' ). Documentação completa do filtro em Hooks e filtros.

Cancelamento manual via PHP

Pra forçar o cancelamento de lembretes (ex.: lojista decidiu desistir do pedido manualmente):

$order   = wc_get_order( 123 );
$actions = new WC_Boleto_Reminder_Actions();
$actions->cancel_events( $order->get_id(), $order, 'Cancelamento manual' );

A timeline registra o motivo passado.

Sem botão no admin

Não há ação no admin do pedido pra cancelar lembretes manualmente. Use o snippet acima ou mude o status pra cancelled.

Foi útil?