🎉 USE O CUPOM DESCONTO.FULL | 20% OFF acima de R$ 50,00

Como corrigir a Conditional Logic que não funciona no ACF PRO

Time Full Services Time Full Services
Tipo Page Builders
Nome do erro Conditional Logic do ACF PRO não funciona EN: ACF PRO conditional logic not working
Severidade Atenção
Descrição A Conditional Logic do ACF PRO que não funciona quase sempre vem do campo de gatilho que não guarda um valor comparável (Repeater, Group, Mensagem) ou do JavaScript do ACF que não carregou na tela. A lógica condicional só controla a exibição no editor, não impede que o valor oculto seja salvo ou exibido no frontend.

O que é a Conditional Logic do ACF PRO que não funciona?

A Conditional Logic do ACF PRO é a regra que mostra ou esconde um campo dentro do mesmo grupo de campos conforme o valor de outro campo, usando condições como igual a, diferente de, tem valor ou não tem valor. Segundo a documentação do ACF, ela permite definir regras sobre quando um campo deve aparecer com base nos valores de outros campos do mesmo field group. Essa lógica roda no navegador, via o script de input do próprio ACF que é carregado na tela de edição. Quando você muda o valor do campo de controle, o JavaScript do ACF avalia a regra na hora e exibe ou oculta o campo dependente, sem recarregar a página. Por isso a lógica condicional é, na prática, uma camada visual do editor: ela decide o que o usuário vê enquanto preenche, mas não apaga nem bloqueia o dado de um campo que ficou oculto. Se o script não carrega, se o campo de controle não devolve um valor comparável ou se a regra aponta para o campo errado, a condição nunca é satisfeita e o campo dependente fica preso, sempre visível ou sempre escondido.

Como identificar

  • Você seleciona o valor que deveria revelar um campo dependente e nada acontece: o campo continua oculto, ou aparece sempre, ignorando a regra que você configurou no grupo de campos.
  • A lógica condicional funciona ao criar a regra no editor do field group, mas para de funcionar na tela de edição do post, onde os campos não reagem ao mudar o campo de controle.
  • No console do navegador aparece um erro de JavaScript como “acf is not defined” ou “Uncaught TypeError” logo ao abrir a tela com os campos, sinal de que o script de input do ACF não carregou.
  • Em um formulário no frontend criado com acf_form(), os campos não escondem nem aparecem conforme a regra, embora a mesma lógica funcione normalmente dentro do wp-admin.
  • O campo some no editor por causa da regra, mas o valor antigo continua sendo exibido no template do site, mostrando que a lógica condicional não removeu o dado salvo.
  • Você usa um Repeater, um Group, uma Tab ou um campo Mensagem como gatilho e a condição nunca dispara, porque esses campos não retornam um valor único para comparar.

Como prevenir

  • Use sempre campos de escolha (Select, Radio, Checkbox, True/False ou Button Group) como gatilho da lógica condicional, pois eles retornam um valor único e comparável.
  • Ao registrar field groups por código, aponte a conditional_logic para a chave field_xxxx do campo de controle, nunca para o nome do campo.
  • Mantenha os scripts do ACF fora das regras de minificação e de adiamento de JavaScript dos plugins de performance, para a lógica condicional sempre carregar na tela de edição.
  • No template do site, valide o campo de controle antes de exibir o campo dependente, já que a lógica condicional não remove o dado salvo, apenas oculta o campo no editor.

Causa

  • O campo escolhido como gatilho é um Repeater, Group, Tab, Accordion ou Mensagem, que não devolve um valor único comparável, então a condição igual a ou diferente de nunca é satisfeita e o campo dependente não alterna.
  • O script de input do ACF (acf-input) não foi enfileirado na tela porque um plugin de otimização adiou ou removeu o JavaScript, deixando a lógica condicional sem o motor que a avalia no navegador.
  • A regra foi montada com a condição Valor é igual a comparando um texto que não bate com o valor real salvo do campo de escolha (por exemplo, compara com o rótulo em vez do value do Select ou Radio).
  • Em formulário de frontend com acf_form(), a função acf_form_head() não foi chamada no topo do template ou os assets do ACF não foram carregados com acf_enqueue_scripts(), então o JavaScript da lógica condicional não roda fora do admin.
  • A regra ficou contraditória, como exigir que um True/False esteja marcado e desmarcado ao mesmo tempo com AND, condição que nunca pode ser verdadeira e mantém o campo sempre oculto.
  • Ao registrar campos por código com acf_add_local_field_group(), a chave conditional_logic aponta para o nome do campo em vez da chave field_xxxx do campo de controle, e o ACF não reconhece o alvo da regra.

Como resolver

  1. Confirme que o campo de gatilho devolve um valor comparável: abra o grupo de campos e verifique qual campo dispara a regra. Use como gatilho um campo que guarda escolha clara, como Select, Radio, Checkbox, True/False ou Button Group. Repeater, Group, Tab, Accordion e Mensagem não retornam um valor único e não servem de gatilho.
    ACF -> Grupos de Campos -> abrir o grupo -> revisar o campo de controle
  2. Revise a condição comparando com o value, não com o rótulo: na aba Conditional Logic do campo dependente, confirme que a opção escolhida em Valor é igual a corresponde ao value salvo do campo de controle, e não ao rótulo exibido. Em Select e Radio o value pode ser diferente do texto que aparece para o usuário.
    Campo dependente -> Conditional Logic -> Mostrar este campo se -> conferir o value da opção
  3. Verifique se o JavaScript do ACF está carregando na tela: abra a tela de edição do post, pressione F12 e veja a aba Console. Se houver um erro como acf is not defined, o script de input do ACF não carregou. Pause plugins de otimização de JavaScript e teste de novo para isolar o que está removendo o script.
    F12 -> Console -> procurar por: acf is not defined
  4. Exclua os scripts do ACF da otimização de JavaScript: se um plugin de cache ou de minificação está adiando ou combinando o JavaScript, adicione os scripts do ACF à lista de exclusão para que carreguem normais na tela de edição. Use o handle ou o caminho do arquivo de input do ACF.
    acf-input
    /wp-content/plugins/advanced-custom-fields-pro/assets/build/js/acf-input.min.js
  5. No frontend, carregue os assets do ACF no acf_form(): para a lógica condicional funcionar fora do wp-admin, o template precisa preparar o ACF antes do HTML. Chame acf_form_head() no topo do template e garanta que os scripts do ACF sejam enfileirados, sem isso o JavaScript que avalia as regras não roda no frontend.
    acf_form_head();
    acf_enqueue_scripts();
  6. Proteja a exibição no template, porque a regra é só visual: lembre que a Conditional Logic só esconde o campo no editor, ela não impede que o valor seja salvo ou exibido no site. No template, cheque o campo de controle antes de imprimir o campo dependente, para não mostrar dado de um campo que deveria estar oculto.
PHP
<?php
// Conditional Logic registrada por codigo: a regra aponta para a CHAVE do campo de
// controle (field_xxxx), nunca para o nome. So assim o ACF reconhece o gatilho.
acf_add_local_field_group( array(
    'key'    => 'group_plano',
    'title'  => 'Plano',
    'fields' => array(
        array(
            'key'     => 'field_tipo_plano',   // campo de CONTROLE (Select)
            'name'    => 'tipo_plano',
            'label'   => 'Tipo de plano',
            'type'    => 'select',
            'choices' => array(
                'gratis' => 'Gratis',
                'pago'   => 'Pago',
            ),
        ),
        array(
            'key'   => 'field_valor_mensal', // campo DEPENDENTE
            'name'  => 'valor_mensal',
            'label' => 'Valor mensal',
            'type'  => 'number',
            // Mostra so quando o Select tem value 'pago' (compara o VALUE, nao o rotulo).
            'conditional_logic' => array(
                array(
                    array(
                        'field'    => 'field_tipo_plano', // CHAVE, nao 'tipo_plano'
                        'operator' => '==',
                        'value'    => 'pago',
                    ),
                ),
            ),
        ),
    ),
    'location' => array(
        array(
            array( 'param' => 'post_type', 'operator' => '==', 'value' => 'post' ),
        ),
    ),
) );

// No template, a regra NAO protege a saida: cheque o campo de controle antes de exibir.
if ( get_field( 'tipo_plano' ) === 'pago' ) {
    echo esc_html( get_field( 'valor_mensal' ) );
}

Perguntas frequentes

Por que a Conditional Logic do ACF PRO não esconde o campo?
Na maioria dos casos o JavaScript de input do ACF não carregou na tela ou o campo de gatilho não devolve um valor comparável. A lógica condicional roda no navegador e avalia a regra ao vivo. Sem o script, ou usando Repeater e Group como gatilho, a condição nunca é satisfeita e o campo fica preso, sempre visível ou sempre oculto.
Quais campos podem ser usados como gatilho da lógica condicional?
Campos que guardam uma escolha clara funcionam bem como gatilho: Select, Radio, Checkbox, True/False e Button Group. Campos que não retornam um valor único, como Repeater, Group, Tab, Accordion e Mensagem, não servem de gatilho porque a condição não tem um valor para comparar. Campos como Imagem só aceitam as condições tem valor e não tem valor.
A lógica condicional do ACF funciona no frontend com acf_form()?
Funciona, desde que os assets do ACF sejam carregados na página. Chame acf_form_head() no topo do template antes de qualquer HTML e garanta que os scripts do ACF estejam enfileirados. Sem o JavaScript de input do ACF na página do frontend, as regras não avaliam e os campos não escondem nem aparecem como no wp-admin.
A Conditional Logic impede que o campo oculto seja salvo?
Não. A lógica condicional é uma camada visual do editor: ela mostra ou esconde o campo enquanto você preenche, mas não apaga nem bloqueia o valor já salvo. Por isso, no template do site você precisa checar o campo de controle antes de imprimir o campo dependente, senão pode exibir dado de um campo que deveria estar escondido.
Configurei a regra mas o campo aparece sempre. O que verificar?
Confira se a condição compara com o value salvo do campo de controle e não com o rótulo exibido, pois em Select e Radio o value costuma diferir do texto visível. Verifique também se a regra não ficou contraditória, como exigir um True/False marcado e desmarcado ao mesmo tempo com AND, situação que nunca é verdadeira e deixa o campo preso.
Aparece o erro acf is not defined no console. Tem relação?
Tem relação direta. Esse erro indica que o script de input do ACF não carregou, normalmente porque um plugin de otimização adiou, combinou ou removeu o JavaScript. Sem esse script, a lógica condicional não tem o motor que a avalia. Exclua os scripts do ACF da minificação e do adiamento e o erro tende a desaparecer.
Registrei o field group por código e a regra não funciona. Por quê?
Ao usar acf_add_local_field_group(), a conditional_logic precisa apontar para a chave field_xxxx do campo de controle, não para o nome do campo. O ACF identifica o campo da regra pela chave, então com o nome a regra fica sem alvo válido e não dispara. Copie a chave exata do campo de controle e use-a na regra.

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