LGPD

Checkbox de privacidade no checkout do WooCommerce: texto e registro do aceite

O texto de privacidade que o WooCommerce mostra no checkout é só um aviso: não tem caixa pra marcar e não grava nada no pedido. Se a sua loja precisa provar consentimento, você tem que adicionar o campo e salvar data e versão da política junto do pedido.

Primeiro o texto, no painel

Em WooCommerce, Configurações, Contas e privacidade tem o campo de política de privacidade do checkout, com o marcador [privacy_policy] que vira o link da página escolhida. Se o texto vem de um plugin ou de tradução e você quer mexer sem tocar no painel, o filtro é woocommerce_get_privacy_policy_text, que recebe o texto e o tipo (checkout ou registration) — teste o tipo antes de trocar, senão muda também o formulário de cadastro.

A caixa de aceite e o registro

add_action('woocommerce_review_order_before_submit', function () {
    woocommerce_form_field('rt_aceite', [
        'type'     => 'checkbox',
        'class'    => ['form-row', 'validate-required'],
        'label'    => 'Li e aceito a Política de Privacidade',
        'required' => true,
    ], WC()->checkout->get_value('rt_aceite'));
});

add_action('woocommerce_checkout_process', function () {
    if (empty($_POST['rt_aceite'])) {
        wc_add_notice('Marque o aceite da Política de Privacidade.', 'error');
    }
});

add_action('woocommerce_checkout_create_order', function ($order) {
    $order->update_meta_data('_rt_aceite_data', current_time('mysql'));
    $order->update_meta_data('_rt_politica_versao', '2026-01');
});

A classe validate-required cuida do aviso no navegador, mas some com o JavaScript desligado. Quem barra de verdade é o woocommerce_checkout_process, no servidor.

Gravar só um sim não serve de nada em fiscalização. O que vale é a data e a versão do documento que estava no ar naquele dia. Quando você atualizar a política, muda a string da versão e os pedidos antigos continuam apontando pro texto que o cliente realmente leu.

Cuidado com um ponto do WooCommerce 9: se a página de finalizar compra usa o bloco de checkout, e não o shortcode, esses três hooks não rodam. Ali o campo é registrado com woocommerce_register_additional_checkout_field, dentro do woocommerce_init, e a API só aceita os tipos text, select e checkbox. Antes de escrever qualquer linha, veja qual dos dois a loja usa.

Se travou nisso e precisa de ajuda, me chama aqui.

Post Recentes

Criar swapfile no Ubuntu: parar o OOM killer de matar o MySQL

VPS de 2 GB onde o mysqld morre de madrugada e o site volta com erro de conexão. Como confirmar…

9 horas atrás

Grupos nomeados no preg_match: pare de contar índice de $matches

Regex com cinco parênteses e ninguém lembra se a data é $matches[2] ou $matches[3]. Nomeie os grupos e leia o…

23 horas atrás

Token de integração da API do Magento 2: gerar e usar no header Bearer

Erro The consumer isn't authorized to access resources ao chamar a REST do Magento 2.4.8? Ative a integração, libere os…

1 dia atrás

Rate limit no wp-login.php com nginx: barrar força bruta antes do PHP

Bots batendo centenas de POST por minuto no login derrubam a CPU. Configure limit_req_zone no nginx e devolva 429 antes…

2 dias atrás

Anonimizar IP no nginx: mascarar o último octeto do log para a LGPD

Seu access.log guarda o IP inteiro dos visitantes há meses sem necessidade. Mascare o último octeto com map e log_format…

3 dias atrás

Prompt injection em campo de usuário: isole a observação do pedido

A observação do pedido chegou com ordem embutida para gerar cupom. Delimite o texto do cliente e trate a resposta…

3 dias atrás