LGPD

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.

Post Recentes

Timeout do PHP-FPM na chamada de IA: tire do request e jogue no CLI

504 no nginx quando a API de IA demora? Quem desiste primeiro é o nginx, não o PHP. Enfileire o…

1 dia atrás

Erro crítico neste site: usar o modo de recuperação do WordPress 6.9

O site caiu com erro crítico depois de atualizar um plugin e o e-mail de recuperação não chegou? Force um…

1 dia atrás

NumberFormatter no PHP: R$ formatado e valor por extenso em pt-BR

O number_format não põe o R$ nem escreve o valor por extenso. Veja como usar NumberFormatter com CURRENCY e SPELLOUT…

2 dias atrás

Could not ping search engine no Magento 2: OpenSearch fora do ar

Categoria vazia e busca sem resultado no Magento 2.4.8? Teste o OpenSearch com curl, confira o bloco catalog/search do env.php…

3 dias atrás

Bookmarks da grid do Magento 2: colunas somem e o filtro fica preso

Editou o listing.xml e o admin continua com as colunas antigas ou um filtro travado? O estado da grid está…

4 dias atrás

array_chunk no PHP: processar 50 mil registros em lotes sem estourar memória

Importação morrendo com Allowed memory size exhausted? Fatie o processamento com array_chunk e, quando nem o array couber, leia o…

4 dias atrás