🎉 USE O CUPOM FIM.DE.SEMANA.FULL | 20% OFF acima de R$ 100,00

Como corrigir o Number Field que não valida no ACF PRO

Time Full Services Time Full Services
Tipo Page Builders
Nome do erro Number Field do ACF PRO nao valida EN: ACF Number Field validation not working
Severidade Informativo
Descrição O ACF Number Field não valida quando a opção Required esta desligada, quando Minimum Value, Maximum Value e Step Size estão em branco, ou quando o valor chega ao banco por update_field sem passar pela validação do formulário, deixando o campo aceitar valores vazios ou fora do intervalo.

O que é ACF Number Field que não valida?

O ACF Number Field e um campo que, segundo a documentação oficial do ACF, cria um input limitado a valores numericos. Ele renderiza um controle HTML do tipo number no painel do WordPress e oferece as opções Minimum Value (valor mínimo permitido), Maximum Value (valor máximo permitido) e Step Size (incremento em que o valor pode ser ajustado, padrão 1). Na aba Validation existe a opção Required, que exige um valor numerico e impede que o campo aceite valores vazios.

A falha de validação aparece quando essas regras não são aplicadas: o campo salva em branco, aceita um número fora do intervalo configurado, ou guarda um valor que não respeita o Step Size. A validação do ACF roda no envio do formulário do editor; valores gravados por código com update_field, por importação ou por REST não passam por essa checagem, e por isso podem entrar no banco mesmo violando Minimum Value, Maximum Value ou Required.

Como identificar

  • O campo numerico salva vazio mesmo com a opção Required marcada, e nenhuma mensagem de validação aparece ao tentar publicar.
  • Um valor menor que o Minimum Value ou maior que o Maximum Value e aceito e gravado no post sem aviso.
  • O navegador exibe a mensagem ‘Please enter a valid value. The two nearest valid values are…’ por causa do Step Size, mas você não configurou esse incremento de proposito.
  • O campo retorna texto ou string vazia em vez de número ao ler o valor com get_field no template.
  • Valores gravados por update_field, importação CSV ou REST entram fora do intervalo porque não passaram pela validação do editor.
Antes de começar: Antes de adicionar filtros no functions.php ou rodar uma importação em massa que grava o campo, faça um backup do site (arquivos e banco de dados) ou teste em um ambiente de staging, para poder reverter caso a validação bloqueie registros existentes.

Como prevenir

  • Sempre defina Minimum Value, Maximum Value e Step Size ao criar um Number Field, em vez de deixar os limites em branco, para que o ACF tenha um intervalo concreto para validar.
  • Ligue a opção Required na aba Validation quando o número for obrigatório, lembrando que o padrão do ACF e off.
  • Centralize a regra de negocio num filtro acf/validate_value para que a validação valha também em update_field, importacoes e REST, e não so no editor.
  • Ao gravar valores por código, converta com floatval ou intval e cheque o intervalo antes de update_field, evitando dados fora do limite no banco.

Causa

  • A opção Required, na aba Validation do campo, esta desligada (padrão off na doc do ACF): sem ela o ACF Number Field aceita valores vazios e não bloqueia a publicação com o campo em branco.
  • Os limites Minimum Value e Maximum Value estão em branco nas configurações do campo, entao o ACF não tem intervalo para validar e qualquer número e aceito.
  • O Step Size esta definido com um valor diferente de 1 (ou em branco interpretado como 1), fazendo o input number do navegador rejeitar valores que não casam com o incremento, como decimais quando o passo e inteiro.
  • O valor foi gravado por update_field, por importação ou pela REST API, que escrevem direto no metadado e não acionam a validação de formulário do ACF, deixando passar valores fora do intervalo.
  • O campo armazena o número como string e a comparacao no template usa igualdade estrita, ou um filtro acf/validate_value customizado retorna sempre valido, anulando as regras do campo.

Como resolver

  1. Ative o Required na aba Validation do campo: Em ACF -> Grupos de Campos, abra o grupo, edite o Number Field e ligue a opção Required na aba Validation. Segundo a doc do ACF, isso exige um valor numerico e impede que o campo aceite valores vazios no envio do editor.
    Painel WP -> ACF -> Grupos de Campos -> abra o grupo do campo
    Edite o Number Field -> aba Validation -> marque Required (Obrigatório)
    Atualize o grupo de campos para salvar
  2. Defina Minimum Value e Maximum Value: Ainda na edição do campo, na aba Presentation ou General, preencha Minimum Value e Maximum Value com o intervalo desejado. Sem esses limites o ACF não tem intervalo para validar e aceita qualquer número.
    Edite o Number Field -> defina Minimum Value (valor mínimo permitido)
    Defina Maximum Value (valor máximo permitido)
    Salve o grupo de campos
  3. Ajuste o Step Size para o incremento correto: Configure o Step Size com o incremento real do seu dado. O padrão e 1, o que bloqueia decimais no input number do navegador. Para aceitar casas decimais, use por exemplo 0.01; para inteiros, mantenha 1.
    Edite o Number Field -> campo Step Size
    Para decimais: defina Step Size como 0.01
    Para inteiros: mantenha Step Size como 1
  4. Reforce a validação no servidor com acf/validate_value: Como update_field, importação e REST não passam pela validação do formulário, adicione um filtro acf/validate_value para garantir o intervalo também no servidor. Esse hook roda na validação do ACF e devolve uma mensagem quando o valor sai do limite.
    Adicione o filtro acf/validate_value no functions.php do tema filho ou em um plugin próprio
    Use o nome ou a key do campo para mirar so o Number Field correto
    Retorne uma string de erro quando o valor for menor que o mínimo ou maior que o máximo
  5. Sanitize valores gravados por código antes de update_field: Quando gravar o número por código, importação ou REST, valide e converta o valor com floatval ou intval e cheque o intervalo antes de chamar update_field, já que esse caminho ignora a validação do editor do ACF.
    Converta a entrada com floatval() ou intval() antes de gravar
    Cheque manualmente se o número esta entre o mínimo e o máximo
    So entao chame update_field() com o valor saneado
PHP
<?php
add_filter( 'acf/validate_value/name=quantidade', 'full_valida_acf_number', 10, 4 );
function full_valida_acf_number( $valid, $value, $field, $input_name ) {
    // Mantem mensagens anteriores (ex.: Required) intactas.
    if ( $valid !== true ) {
        return $valid;
    }
    // Campo vazio nao numerico: deixa o Required decidir.
    if ( $value === '' || $value === null ) {
        return $valid;
    }
    $numero = floatval( $value );
    $min    = $field['min'] !== '' ? floatval( $field['min'] ) : null;
    $max    = $field['max'] !== '' ? floatval( $field['max'] ) : null;
    if ( $min !== null && $numero < $min ) {
        return sprintf( 'O valor minimo permitido e %s.', $min );
    }
    if ( $max !== null && $numero > $max ) {
        return sprintf( 'O valor maximo permitido e %s.', $max );
    }
    return true;
}

Perguntas frequentes

Por que o ACF Number Field aceita valor vazio mesmo sendo obrigatório
Porque a opção Required, na aba Validation do campo, esta desligada. Segundo a doc do ACF, o padrão e off, e sem ela o campo aceita valores vazios. Edite o Number Field, ligue Required e salve o grupo de campos.
Como faço o Number Field do ACF limitar o intervalo de valores
Defina Minimum Value (valor mínimo permitido) e Maximum Value (valor máximo permitido) nas configurações do campo. Sem esses limites preenchidos o ACF não tem intervalo para validar e aceita qualquer número digitado.
O que e o Step Size do ACF Number Field e por que ele bloqueia meu valor
O Step Size e o incremento em que o valor numerico pode ser ajustado, com padrão 1. Se você precisa de decimais e o passo esta em 1, o input number do navegador rejeita o valor. Defina o Step Size como 0.01 para aceitar duas casas decimais.
Por que update_field grava um número fora do intervalo no ACF
Porque update_field escreve direto no metadado e não aciona a validação de formulário do ACF. Valide e cheque o intervalo manualmente no código antes de gravar, ou adicione um filtro acf/validate_value para reforcar a regra no servidor.
Como valido o Number Field também na importação e na REST API
Importação e REST gravam o metadado sem passar pela validação do editor. Use o filtro acf/validate_value para mirar o campo pela key e devolver uma mensagem quando o valor sair do limite, além de sanear o valor com floatval ou intval antes de gravar.
Por que get_field retorna o número como string em vez de número
O ACF guarda o valor no metadado e pode devolve-lo como string. Converta com floatval ou intval no template antes de comparar ou calcular, e evite comparacoes de igualdade estrita que falham entre string e número.
Posso usar casas decimais no ACF Number Field
Sim. Ajuste o Step Size para um incremento decimal, como 0.01, já que o padrão 1 limita o input a inteiros. Combine isso com Minimum Value e Maximum Value coerentes com os decimais que você espera receber.
Qual a diferenca entre validar no editor e validar no servidor no ACF
A validação do editor roda no envio do formulário e cobre o que e digitado a mao. Já o filtro acf/validate_value roda na validação do ACF no servidor e cobre também caminhos como update_field, importação e REST, garantindo o intervalo em qualquer origem.

Seja PRO.

Tenha acesso a snippets de código premium — PHP, JavaScript, CSS e HTML prontos para usar em seus projetos.

Conhecer o plano Pro →

Uma nova era para o WordPress.

A FULL Services redefine o CMS com uma arquitetura modular que transforma o WordPress em um motor de crescimento digital. 

Painéis personalizados

Um novo nível de controle para o WordPress. Acompanhe métricas, automações e evolução do seu site em um único painel visual.

A força por trás de grandes marcas

Para agências, estúdios e profissionais independentes que desejam oferecer soluções de alto nível com sua própria marca.

Componentes

Hero Sections

30 componentes

Seções de CTA

14 componentes

Login

14 componentes

Blog

14 componentes

Cabeçalhos

24 componentes

Seções de FAQ

53 componentes

Cadastro

53 componentes

Blog individual

53 componentes

Rodapés

28 componentes

Seções de contato

27 componentes

Seções de preços

27 componentes

Faixas

27 componentes

Portfólio

16 componentes

Seções de equipe

12 componentes

Números

12 componentes

Logotipos

12 componentes