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.