CF7: Validação de CPF/CNPJ

Este snippet adiciona uma validação completa para campos de CPF/CNPJ no Contact Form 7, garantindo que os valores inseridos pelos usuários sejam válidos antes de permitir a submissão do formulário. Isso melhora a integridade dos dados coletados e proporciona uma melhor experiência ao usuário.

0
				
					//Adicionando o JavaScript para Validação no Rodapé
function wp24horas_add_cpf_cnpj_validation_script() {
    ?>
    
        document.addEventListener('DOMContentLoaded', function() {
            document.addEventListener('wpcf7submit', function(event) {
                var cpfCnpjField = document.querySelector('[name="cpf_cnpj"]');
                if (cpfCnpjField && !isValidCpfCnpj(cpfCnpjField.value)) {
                    event.preventDefault();
                    alert('CPF/CNPJ inválido. Por favor, insira um valor válido.');
                }
            });

            function isValidCpfCnpj(value) {
                value = value.replace(/[\D]/g, ''); // Remove caracteres não numéricos
                if (value.length === 11) {
                    return isValidCpf(value);
                } else if (value.length === 14) {
                    return isValidCnpj(value);
                }
                return false;
            }

            function isValidCpf(cpf) {
                if (cpf.length !== 11 || /^(\d)\1{10}$/.test(cpf)) return false;
                var sum, rest;
                sum = 0;
                for (var i = 1; i <= 9; i++) sum += parseInt(cpf.substring(i - 1, i)) * (11 - i);
                rest = (sum * 10) % 11;
                if ((rest === 10) || (rest === 11)) rest = 0;
                if (rest !== parseInt(cpf.substring(9, 10))) return false;
                sum = 0;
                for (var i = 1; i = 1; i--) {
                    sum += numbers.charAt(length - i) * pos--;
                    if (pos < 2) pos = 9;
                }
                var result = sum % 11 = 1; i--) {
                    sum += numbers.charAt(length - i) * pos--;
                    if (pos < 2) pos = 9;
                }
                result = sum % 11 < 2 ? 0 : 11 - sum % 11;
                if (result !== parseInt(digits.charAt(1))) return false;
                return true;
            }
        });
    
     true));
}

function wp24horas_form_tag_cpf_cnpj($tag) {
    $tag = new WPCF7_FormTag($tag);
    $validation_error = wpcf7_get_validation_error($tag->name);
    $class = wpcf7_form_controls_class($tag->type);
    if ($validation_error) {
        $class .= ' wpcf7-not-valid';
    }
    $atts = array();
    $atts['type'] = 'text';
    $atts['name'] = $tag->name;
    $atts['value'] = $tag->get_default_option($tag->values);
    $atts['class'] = $tag->get_class_option($class);
    $atts['id'] = $tag->get_option('id', 'id', true);
    $atts['tabindex'] = $tag->get_option('tabindex', 'int', true);
    $atts['aria-required'] = $tag->is_required() ? 'true' : 'false';
    $atts['aria-invalid'] = $validation_error ? 'true' : 'false';
    return sprintf('<span class="wpcf7-form-control-wrap %1$s">%3$s</span>', sanitize_html_class($tag->name), wpcf7_format_atts($atts), $validation_error);
}


//Adicionando a Validação Personalizada no PHP
add_filter('wpcf7_validate_cpf_cnpj*', 'wp24horas_validate_cpf_cnpj', 20, 2);
add_filter('wpcf7_validate_cpf_cnpj', 'wp24horas_validate_cpf_cnpj', 20, 2);

function wp24horas_validate_cpf_cnpj($result, $tag) {
    $tag = new WPCF7_FormTag($tag);
    $name = $tag->name;
    $value = isset($_POST[$name]) ? trim($_POST[$name]) : '';
    if (!wp24horas_is_valid_cpf_cnpj($value)) {
        $result->invalidate($tag, 'CPF/CNPJ inválido.');
    }
    return $result;
}

function wp24horas_is_valid_cpf_cnpj($value) {
    $value = preg_replace('/[^0-9]/', '', $value);
    if (strlen($value) === 11) {
        return wp24horas_is_valid_cpf($value);
    } elseif (strlen($value) === 14) {
        return wp24horas_is_valid_cnpj($value);
    }
    return false;
}

function wp24horas_is_valid_cpf($cpf) {
    if (strlen($cpf) != 11 || preg_match('/(\d)\1{10}/', $cpf)) {
        return false;
    }
    for ($t = 9; $t < 11; $t++) {
        for ($d = 0, $c = 0; $c < $t; $c++) {
            $d += $cpf[$c] * (($t + 1) - $c);
        }
        $d = ((10 * $d) % 11) % 10;
        if ($cpf[$c] != $d) {
            return false;
        }
    }
    return true;
}

function wp24horas_is_valid_cnpj($cnpj) {
    if (strlen($cnpj) != 14 || preg_match('/(\d)\1{13}/', $cnpj)) {
        return false;
    }
    $t = 12;
    for ($d = 0, $p = 5, $c = 0; $c < $t; $c++) {
        $d += $cnpj[$c] * $p;
        $p = ($p == 2) ? 9 : $p - 1;
    }
    $d = ((10 * $d) % 11) % 10;
    if ($cnpj[$c] != $d) {
        return false;
    }
    $t = 13;
    for ($d = 0, $p = 6, $c = 0; $c < $t; $c++) {
        $d += $cnpj[$c] * $p;
        $p = ($p == 2) ? 9 : $p - 1;
    }
    $d = ((10 * $d) % 11) % 10;
    if ($cnpj[$c] != $d) {
        return false;
    }
    return true;
}

				
			

Quer ajuda de um especialista para implementar?

Instruções de Uso

Explicação do Snippet

  1. Adicionando JavaScript para Validação:
    • O script é adicionado ao rodapé da página.
    • Ele ouve o evento wpcf7submit do Contact Form 7 para verificar o valor do campo CPF/CNPJ antes de enviar o formulário.
    • Se o CPF/CNPJ não for válido, a submissão do formulário é impedida e uma mensagem de erro é exibida.
  2. Adicionando a Tag de Formulário Personalizada:
    • Um novo tipo de campo cpf_cnpj é registrado para ser usado nos formulários do Contact Form 7.
    • O campo é criado com base nas especificações do Contact Form 7 e inclui atributos necessários para a validação.
  3. Adicionando a Validação Personalizada no PHP:
    • As funções de validação para CPF e CNPJ são adicionadas para validar os valores no lado do servidor.
    • Os filtros wpcf7_validate_cpf_cnpj* e wpcf7_validate_cpf_cnpj são usados para aplicar a validação ao campo personalizado.

Instruções de Uso

  1. Adicione o código ao arquivo functions.php do seu tema ou em um plugin específico.
  2. No formulário do Contact Form 7, adicione um campo com o tipo [cpf_cnpj].

Outros Snippets

WooCommerce
Este snippet cria um shortcode que exibe os detalhes de uma reserva do WooCommerce com base no ID do pedido fornecido na URL.
WordPress
Este snippet redireciona todos os visitantes do site que não estejam logados para uma página específica (não a página de login).
WordPress
Este snippet redireciona todos os visitantes do site que não estejam logados para a página de login do WordPress. Isso é útil se você deseja restringir o acesso ao conteúdo do seu site apenas para usuários autenticados.

Últimos Posts

Conclusão: Resumo e Próximos Passos no Desenvolvimento WordPress

Conclusão: Resumo e Próximos Passos no Desenvolvimento WordPress

Resumo dos principais pontos do desenvolvimento WordPress e próximos passos para continuar aprendendo e evoluindo como desenvolvedor. Guia final para iniciantes e intermediários!

Recursos e Comunidade: Onde Buscar Suporte e Continuar Aprendendo

Recursos e Comunidade: Onde Buscar Suporte e Continuar Aprendendo

Descubra onde buscar suporte e continuar aprendendo sobre WordPress com comunidades online, fóruns de suporte, blogs, cursos e documentações oficiais. Guia completo para iniciantes e intermediários!

Desenvolvimento WordPress como Profissão: Vale a Pena?

Desenvolvimento WordPress como Profissão: Vale a Pena?

Descubra se vale a pena seguir uma carreira em desenvolvimento WordPress, explore os potenciais de ganho, como gerar renda e os melhores investimentos em conhecimento e habilidades. Guia completo para aspirantes a desenvolvedor WordPress.

Otimização para SEO e Performance no WordPress

Otimização para SEO e Performance no WordPress

Aprenda técnicas essenciais de otimização para SEO e performance no WordPress. Melhore a visibilidade e a velocidade do seu site com práticas recomendadas para desenvolvedores e administradores de sites.

Segurança no Desenvolvimento WordPress: Mantendo seu Site Seguro

Segurança no Desenvolvimento WordPress: Mantendo seu Site Seguro

Descubra práticas recomendadas para manter seu site WordPress seguro e conheça os plugins essenciais de segurança. Guia completo para desenvolvedores!

Explorando a REST API do WordPress: Integrações e Funcionalidades Avançadas

Descubra o que é a REST API do WordPress, por que é importante e como usá-la para integrar WordPress com outras aplicações. Guia completo para iniciantes e intermediários!

Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Você precisa estar logado para ver esta informação.

Adicione seu Snippet

Título *
Resumo *
Descrição Completa *
Código *
Instruções de uso *

Solicitar Orçamento

Torne-se um Assinante e Eleve seu Conhecimento do WordPress!

Acesso Exclusivo, Suporte Especializado e Muito Mais.

Se você está aproveitando nosso conteúdo gratuito, vai adorar os benefícios exclusivos que oferecemos aos nossos assinantes! 

Não perca a oportunidade de maximizar seu potencial no WordPress. Clique no botão abaixo para se tornar um assinante e leve suas habilidades ao próximo nível!