O plugin grava o histórico de envios de cada pedido no meta _whatsapp_message_sent. Esse artigo cobre o formato, como ler, escrever e migrar do formato legado.
Formato
Array indexado por ID da mensagem (posição na aba Mensagens, começando em 0) com timestamp Unix do envio:
[
0 => 1709568000, // primeira mensagem ("Lembrete de pagamento") enviada em 04/03/2024 12:00 UTC
1 => 1709827200, // segunda mensagem enviada em 07/03/2024 12:00 UTC
2 => null, // terceira mensagem nunca foi enviada (chave nem existe)
]
Chaves não enviadas não existem no array (não são null). Para checar se uma mensagem foi enviada:
$sent = $order->get_meta( '_whatsapp_message_sent' );
$was_sent = isset( $sent[ $message_id ] );
Ler
$order = wc_get_order( 1234 );
$sent = $order->get_meta( '_whatsapp_message_sent' );
if ( ! is_array( $sent ) ) {
$sent = [];
}
foreach ( $sent as $message_id => $timestamp ) {
printf(
"Mensagem #%d enviada em %s\n",
$message_id,
date( 'd/m/Y H:i', $timestamp )
);
}
Escrever
Para registrar manualmente um envio (por exemplo, em integração com outro sistema):
$order = wc_get_order( 1234 );
$sent = $order->get_meta( '_whatsapp_message_sent' );
$sent = is_array( $sent ) ? $sent : [];
$sent[0] = time(); // marca a primeira mensagem como enviada agora
$order->update_meta_data( '_whatsapp_message_sent', $sent );
$order->add_order_note( 'Enviado WhatsApp manualmente: Lembrete de pagamento' );
$order->save();
A nota no pedido é parte do contrato de UX — quando o usuário clica no botão na lista, o plugin adiciona uma nota com o título da mensagem. Replicar essa nota mantém consistência.
Resetar
Para apagar o histórico de envios de um pedido (botões voltam pra cinza):
$order = wc_get_order( 1234 );
$order->delete_meta_data( '_whatsapp_message_sent' );
$order->save();
Para apagar só uma mensagem específica:
$order = wc_get_order( 1234 );
$sent = $order->get_meta( '_whatsapp_message_sent' );
if ( is_array( $sent ) ) {
unset( $sent[ $message_id ] );
$order->update_meta_data( '_whatsapp_message_sent', $sent );
$order->save();
}
Migração do formato legado
Em versões 1.1.x do plugin, o meta era _whatsapp_message_sent_1 — string única (timestamp do único envio). A partir da v1.2.0, virou array em _whatsapp_message_sent.
A migração é lazy: acontece na primeira vez que o pedido é tocado pelo plugin (clique num botão da lista, abertura do meta box, ou chamada direta ao código). O plugin lê o legado e copia pro novo formato sob a chave 0.
Você não precisa rodar migração manual. Pedidos antigos continuam funcionando.
Se quiser limpar metas legados em massa (estética, sem ganho funcional):
$wpdb->query(
"DELETE FROM {$wpdb->postmeta} WHERE meta_key = '_whatsapp_message_sent_1'"
);
Para HPOS, o equivalente é a tabela wc_orders_meta.
AJAX endpoint
Para entender como o plugin escreve no meta a partir do clique no botão, o handler AJAX é wp_ajax_wc_whatsapp_pending_orders:
- Action:
wc_whatsapp_pending_orders - POST data:
order_id— ID do pedidomessage_id— índice da mensagem (0, 1, 2...)
- Response:
{ success: true }
Se você quer disparar a marcação de envio do JS sem clicar no botão visualmente:
jQuery.post( ajaxurl, {
action : 'wc_whatsapp_pending_orders',
order_id : 1234,
message_id : 0
} );
Requer permissão manage_woocommerce (mesma da aba Pedidos).
Por que indexar por posição e não por hash
A escolha de indexar por posição da mensagem na aba (0, 1, 2) tem um trade-off conhecido:
- ✅ Simples de ler/escrever.
- ❌ Se você reordenar mensagens na aba Mensagens, o histórico fica "deslocado" — o que era a mensagem
0(Lembrete) agora é1, e o registro antigo passa a apontar pra outra mensagem.
Recomendação: não reordene mensagens depois que estiver em produção. Adicione novas no final ou substitua o texto da existente.