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 é
pendingouon-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
pendingouon-hold? - O e-mail está habilitado em WooCommerce → Configurações → E-mails → Lembrete para pagamento de boleto?
- O
expiry_timedo boleto (quando o gateway expõe) ainda não passou?
Se sim em todas, o e-mail é enviado e o evento é registrado na timeline.
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.
Não há ação no admin do pedido pra cancelar lembretes manualmente. Use o snippet acima ou mude o status pra cancelled.