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

json_validate no PHP 8.3: conferir se o JSON é válido sem decodificar

A função json_validate do PHP 8.3 diz se a string é JSON válido sem montar array nem objeto. Serve para…

8 horas atrás

Chave de API fora do Git: .env, getenv() e o que fazer se ela já vazou

Tire a chave de API do código com variável de ambiente, bloqueie o .env no nginx e entenda por que…

16 horas atrás

HPOS no WooCommerce: ativar as tabelas wc_orders e migrar os pedidos

A opção de armazenamento de pedidos travada em posts e a sincronização que nunca termina: como migrar para as tabelas…

1 dia atrás

str_contains no PHP 8: parar de comparar strpos com !== false

Troque strpos e substr por str_contains, str_starts_with e str_ends_with no PHP 8, com o polyfill para quem ainda mantém servidor…

2 dias atrás

Data Patch Magento 2: criar atributo de produto sem InstallData

Copiou um InstallData.php de tutorial antigo e o atributo não apareceu depois do setup:upgrade? Veja a classe de Data Patch…

2 dias atrás

Criar cupom no WooCommerce por código: WC_Coupon com validade e limite

Função pronta para gerar um cupom único por cliente depois do pedido concluído, com WC_Coupon, data de expiração, limite de…

3 dias atrás