Como Adicionar e Validar CPF e CNPJ no Checkout do WooCommerce com Hooks Nativos

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:

  1. woocommerce_checkout_fields (Filtro): Permite adicionar, remover ou modificar os campos exibidos no formulário de checkout.
  2. 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.
  3. 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:

  1. 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.php do tema.
  2. 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).
  3. Sanitização rigorosa: Aplicar sanitize_text_field() e remoção de caracteres não numéricos antes de persistir a informação.
  4. Exibição no Painel Administrativo: Utilizar o hook woocommerce_admin_order_data_after_billing_address para 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.

Preencha o formulário abaixo para que eu consiga entrar em contato com você.