Chega o pedido de exclusão pela LGPD e você trava: apagar o pedido derruba o histórico que a contabilidade precisa manter por anos. Os dois não brigam. A lei fala em eliminar dado pessoal, a obrigação fiscal fala em guardar a operação. O caminho é anonimizar o pedido: itens, valores e datas ficam; nome, e-mail, endereço e IP viram lixo.
Um pedido específico, agora
sudo -u www-data wp eval 'WC_Privacy_Erasers::remove_order_personal_data( wc_get_order( 4821 ) );'É o mesmo método que a ação em massa do admin chama. Ele troca os campos de faturamento e entrega por texto genérico, zera o IP e o user agent, apaga as notas do pedido e registra uma nota “Personal data removed.”. O total e os produtos continuam lá para o relatório fechar. A classe só é incluída no init, então isso roda liso no wp eval, mas quebra com “Class not found” se você chamar durante o carregamento de um plugin.
Automatize pelo painel e trate o CPF
Em WooCommerce > Configurações > Contas e privacidade, na seção de retenção de dados pessoais, o campo “Reter pedidos concluídos” recebe um número e uma unidade (meses, normalmente). A partir daí o WooCommerce anonimiza sozinho, numa rotina diária agendada no Action Scheduler.
O que ele não sabe limpar é o campo que o plugin de checkout brasileiro criou. Ganche no hook e apague o seu meta junto:
add_action( 'woocommerce_privacy_remove_order_personal_data', function ( $order ) {
foreach ( array( '_billing_cpf', '_billing_birthdate', '_billing_number' ) as $meta ) {
$order->delete_meta_data( $meta );
}
$order->save();
} );Esse hook dispara depois que o core já deu o save() dele, por isso o $order->save() no fim do callback não é enfeite: sem ele o meta volta. Antes de rodar em lote, faça o dump do banco e teste num pedido de homologação — o cliente perde o acesso a esse pedido na conta dele e não existe desfazer.