
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.
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.
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.
504 no nginx quando a API de IA demora? Quem desiste primeiro é o nginx, não o PHP. Enfileire o…
O site caiu com erro crítico depois de atualizar um plugin e o e-mail de recuperação não chegou? Force um…
O number_format não põe o R$ nem escreve o valor por extenso. Veja como usar NumberFormatter com CURRENCY e SPELLOUT…
Categoria vazia e busca sem resultado no Magento 2.4.8? Teste o OpenSearch com curl, confira o bloco catalog/search do env.php…
Editou o listing.xml e o admin continua com as colunas antigas ou um filtro travado? O estado da grid está…
Importação morrendo com Allowed memory size exhausted? Fatie o processamento com array_chunk e, quando nem o array couber, leia o…