Como Adicionar e Validar CPF e CNPJ no Checkout do WooCommerce com Hooks Nativos
No e-commerce brasileiro, a coleta precisa de documentos como CPF ou CNPJ é um requisito fundamental para a emissão de notas fiscais e para o processamento logístico. No entanto, muitas lojas virtuais construídas sobre o WooCommerce enfrentam problemas de desempenho e incompatibilidade ao recorrer a plugins genéricos de terceiros apenas para adicionar e validar esses campos no checkout.
Depender de plugins excessivos para funcionalidades simples pode comprometer o tempo de carregamento da página final de compra, aumentar o risco de conflitos em atualizações do WordPress e gerar uma experiência de usuário truncada.
A solução mais eficiente e segura para manter a loja leve e estável é utilizar os hooks nativos do ecossistema WooCommerce para registrar, validar e salvar esses dados diretamente no fluxo do pedido.
A Estrutura do Checkout no WooCommerce e os Hooks Essenciais
O WooCommerce oferece uma arquitetura extremamente extensível baseada em action hooks e filter hooks. Para manipular o formulário de finalização de compra sem alterar o código-fonte do plugin principal, utilizam-se três pontos de ancoragem principais:
woocommerce_checkout_fields(Filtro): Permite adicionar, remover ou modificar os campos exibidos no formulário de checkout.woocommerce_checkout_process(Ação): É disparado no momento em que o cliente clica em finalizar o pedido, permitindo executar validações no servidor antes de processar o pagamento.woocommerce_checkout_update_order_meta(Ação): Executado após a validação, gravando os dados customizados nos meta dados do pedido (postmeta).
Passo a Passo para Implementação Técnica
1. Registrando o Campo Personalizado
Utilizando o filtro woocommerce_checkout_fields, injetamos o campo de documento dentro da seção de faturamento (billing).
add_filter( 'woocommerce_checkout_fields', 'adicionar_campo_documento_checkout' );
function adicionar_campo_documento_checkout( $fields ) {
$fields['billing']['billing_documento'] = array(
'type' => 'text',
'label' => 'CPF ou CNPJ',
'placeholder' => 'Digite seu CPF ou CNPJ',
'required' => true,
'class' => array( 'form-row-wide' ),
'priority' => 25,
);
return $fields;
}
2. Validando o Documento no Lado do Servidor
Em implementações que realizo para e-commerces com alto volume de vendas, a validação no lado do servidor (server-side) é indispensável. Apenas validar via JavaScript no navegador deixa a aplicação vulnerável a requisições maliciosas ou dados corrompidos.
Através do hook woocommerce_checkout_process, interceptamos o envio do formulário e aplicamos algoritmos de verificação dos dígitos verificadores do CPF ou CNPJ:
add_action( 'woocommerce_checkout_process', 'validar_campo_documento_checkout' );
function validar_campo_documento_checkout() {
if ( isset( $_POST['billing_documento'] ) ) {
$documento = preg_replace( '/[^0-9]/', '', $_POST['billing_documento'] );
if ( empty( $documento ) ) {
wc_add_notice( 'Por favor, informe um CPF ou CNPJ válido.', 'error' );
} elseif ( strlen( $documento ) === 11 ) {
if ( ! validar_cpf( $documento ) ) {
wc_add_notice( 'O CPF informado é inválido.', 'error' );
}
} elseif ( strlen( $documento ) === 14 ) {
if ( ! validar_cnpj( $documento ) ) {
wc_add_notice( 'O CNPJ informado é inválido.', 'error' );
}
} else {
wc_add_notice( 'O documento deve conter 11 dígitos (CPF) ou 14 dígitos (CNPJ).', 'error' );
}
}
}
Nota: As funções helper validar_cpf() e validar_cnpj() contêm a lógica matemática de verificação dos dígitos.
3. Salvando os Dados no Pedido
Após o pedido ser validado com sucesso, gravamos a informação no banco de dados vinculada ao ID do pedido:
add_action( 'woocommerce_checkout_update_order_meta', 'salvar_documento_meta_pedido' );
function salvar_documento_meta_pedido( $order_id ) {
if ( ! empty( $_POST['billing_documento'] ) ) {
$documento = sanitize_text_field( $_POST['billing_documento'] );
update_post_meta( $order_id, '_billing_documento', $documento );
}
}
Fluxo Recomendado de Execução
Para garantir que a solução funcione sem gerar problemas em atualizações futuras do tema ou do WooCommerce, o processo ideal de implantação deve seguir estes passos:
- Isolamento de Código: Criar um plugin funcional específico da loja (Must-Use Plugin ou plugin customizado) em vez de colar o código no arquivo
functions.phpdo tema. - Máscara de Entrada (Frontend): Adicionar um script leve de JavaScript para formatar a digitação do usuário em tempo real (ex:
000.000.000-00). - Sanitização rigorosa: Aplicar
sanitize_text_field()e remoção de caracteres não numéricos antes de persistir a informação. - Exibição no Painel Administrativo: Utilizar o hook
woocommerce_admin_order_data_after_billing_addresspara que a equipe de operação visualize o documento nas telas do painel e nas notas de entrega.
Precisa de Ajustes Customizados para sua Loja WooCommerce?
Manter um checkout limpo, rápido e perfeitamente integrado às exigências fiscais brasileiras requer código sob medida e conhecimento profundo dos hooks do WooCommerce.
Se sua loja necessita de integração customizada com emissores de nota fiscal, gateways de pagamento específicos ou otimização do fluxo de checkout para aumentar a taxa de conversão, entre em contato para agendar uma consultoria técnica.


