Apagar dados do cliente no WooCommerce sem perder o histórico do pedido

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.

Dúvidas? Faça um comentário logo abaixo ou envie uma mensagem clicando aqui.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *