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

Como corrigir Custom Fields que não exibem no frontend no ACF PRO

Time Full Services Time Full Services
Tipo Page Builders
Nome do erro Custom Fields do ACF PRO não exibem no frontend EN: ACF PRO custom fields not showing on frontend
Severidade Grave
Descrição Quando os ACF custom fields não aparecem no frontend, o valor existe no banco mas o tema chama o campo de forma incorreta: nome errado, fora do Loop, sem post ID ou com Location Rules que não casam com a tela atual. A correção é alinhar a chamada the_field() ou get_field() ao contexto real do template.

O que é ACF custom fields que não aparecem no frontend?

ACF custom fields que não aparecem no frontend é a situação em que um campo do Advanced Custom Fields PRO foi preenchido no editor do WordPress, mas o valor não é renderizado na página pública. Na maioria dos casos o dado está salvo corretamente no postmeta; o que falha é a forma como o tema solicita esse valor com as funções the_field() ou get_field(). O ACF só retorna o valor quando a função recebe o nome exato do campo e sabe a qual post ele pertence.

O problema também aparece quando o grupo de campos (Field Group) tem Location Rules que não correspondem à tela onde você está editando ou exibindo. Se o grupo está restrito a um post type ou template que não é o atual, o campo nem é carregado para aquele contexto, e a função do tema devolve um valor vazio.

Como identificar

  • A página pública mostra um espaço em branco ou nada no lugar onde o campo deveria aparecer, mesmo com o valor preenchido no admin.
  • Ao usar var_dump(get_field(‘nome_do_campo’)) no template, o retorno é exatamente “bool(false)” ou “NULL”.
  • O campo aparece corretamente no editor do post, mas some no tema (single.php, page.php ou template do page builder).
  • Com WP_DEBUG ativo, surge “Notice: Trying to get property of non-object” ou “Undefined variable” na linha que chama the_field().
  • O shortcode [acf field=”nome_do_campo”] renderiza vazio dentro de um conteúdo ou widget.

Como prevenir

  • Padronize os nomes dos campos em minúsculas com underscore e copie o Field Name direto do painel ao escrever o template, evitando erros de digitação.
  • Sempre que chamar get_field() fora do Loop, passe explicitamente o post ID ou ‘option’ como segundo parâmetro.
  • Antes de publicar, valide cada novo campo com var_dump no template e WP_DEBUG ativo em ambiente de staging.
  • Documente o Return Format de cada campo de imagem ou link no Field Group para que o time saiba se deve ecoar a URL ou tratar o array.

Causa

  • A função do tema usa o field key (formato field_5f8a1b2c3d4e) em vez do field name legível; the_field() e get_field() esperam o nome do campo, não a chave.
  • A chamada the_field() ou get_field() está fora do The Loop e sem o segundo parâmetro de post ID, então o ACF não sabe de qual post buscar o valor e retorna false.
  • As Location Rules do Field Group apontam para outro post type, template ou taxonomia, de modo que o grupo não é atribuído à tela atual e o campo não existe naquele contexto.
  • O nome do campo na função não bate com o nome real cadastrado no Field Group (diferença de underscore, acento, maiúscula ou plural, como meu_campo versus meucampo).
  • O Return Format do campo está como Array ou Image Array, então the_field() imprime vazio porque tenta ecoar uma estrutura em vez de uma string de texto ou URL.
  • O valor está em um post diferente (por exemplo um Options Page ou outro post ID) e a função foi chamada sem informar 'option' ou o ID correto como segundo argumento.

Como resolver

  1. Confirme se o valor está salvo no banco com var_dump: No template do tema (por exemplo single.php), antes de qualquer formatação, imprima o valor cru do campo. Se o retorno for false ou NULL, o problema é de contexto ou de nome; se vier o valor, o problema é só de formatação na exibição. Ative WP_DEBUG no wp-config.php para ver os avisos.
    var_dump( get_field('nome_do_campo') );
  2. Use o nome do campo, não o field key: Abra Custom Fields, edite o Field Group e confira o valor exato em Field Name (coluna do meio, em minúsculas com underscore). Use esse nome na função, nunca a string que começa com field_. O nome é o identificador legível; a chave field_ é interna do ACF.
    the_field('preco_promocional');
  3. Garanta o contexto do post passando o post ID: Se a chamada está fora do Loop (em um header, sidebar, footer ou template de page builder), informe o post ID como segundo parâmetro. Para campos de uma Options Page, passe a string 'option'. Isso elimina o retorno false por falta de contexto.
    $preco = get_field('preco_promocional', get_the_ID());
    $logo = get_field('logo_rodape', 'option');
  4. Revise as Location Rules do Field Group: Em Custom Fields, edite o grupo e role até Settings -> Location. Confirme que a regra (Post Type igual a, Page Template igual a, Taxonomy etc.) corresponde exatamente à tela onde o campo deve aparecer. Se o grupo aponta para outro contexto, o campo não é atribuído à página atual e nunca retorna valor. Confirme também que o grupo está Ativo (Active).
  5. Ajuste o Return Format conforme o tipo de campo: Para campos Image, Link ou Post Object, the_field() pode imprimir vazio quando o Return Format é Array. Defina o Return Format como URL ou ID quando quiser ecoar direto, ou use get_field() e acesse a chave do array no tema. Salve o Field Group após a mudança.
    $img = get_field('imagem_destaque');
    echo esc_url( $img['url'] );
PHP
<?php
// Exibir um campo ACF com segurança, dentro ou fora do Loop.
// Passa o post ID explicitamente para evitar retorno false fora do Loop.

$post_id = get_the_ID();
$subtitulo = get_field( 'subtitulo', $post_id );

if ( $subtitulo ) {
    echo '<p class="subtitulo">' . esc_html( $subtitulo ) . '</p>';
}

// Campo de imagem com Return Format = Array: acessar a chave 'url'.
$imagem = get_field( 'imagem_destaque', $post_id );

if ( $imagem && ! empty( $imagem['url'] ) ) {
    echo '<img src="' . esc_url( $imagem['url'] ) . '" alt="' . esc_attr( $imagem['alt'] ) . '">';
}

// Campo global de uma Options Page: usar 'option' como segundo argumento.
$telefone = get_field( 'telefone_contato', 'option' );

if ( $telefone ) {
    echo '<span class="tel">' . esc_html( $telefone ) . '</span>';
}
?>

Perguntas frequentes

Por que get_field() retorna false mesmo com o campo preenchido?
Quase sempre é contexto ou nome. Se a chamada está fora do Loop, o ACF não sabe de qual post buscar e devolve false; passe o post ID como segundo parâmetro. Se o nome do campo difere do cadastrado no Field Group, o retorno também é false. Confirme com var_dump antes de formatar.
Qual a diferença entre the_field() e get_field() no ACF?
the_field() imprime o valor direto na página, ideal para texto simples. get_field() retorna o valor como variável, para você tratar, validar ou escapar antes de exibir. Para imagens, links e relacionamentos use get_field() e trabalhe o array ou a URL retornada.
Devo usar o field name ou o field key na função do tema?
Use o field name, o identificador legível em minúsculas com underscore que aparece na coluna Field Name do grupo. A field key, que começa com field_ seguido de caracteres aleatórios, é de uso interno do ACF e faz the_field() e get_field() retornarem vazio quando usada no tema.
Por que o campo aparece no admin mas some no frontend?
O valor está salvo, então o problema é a chamada no template. Verifique se o nome do campo está correto, se a função está dentro do Loop ou recebe o post ID, e se as Location Rules do Field Group casam com o template que renderiza essa página. Um único desses fatores fora do lugar zera a saída.
Como exibir um campo do ACF dentro de um header ou sidebar?
Header, sidebar e footer rodam fora do Loop principal, então a função não tem contexto de post. Passe o ID explicitamente, por exemplo get_field('subtitulo', get_the_ID()), ou use get_queried_object_id() para a página atual. Para campos globais, use uma Options Page e passe 'option' como segundo argumento.
Por que um campo de imagem do ACF imprime vazio com the_field()?
Campos Image costumam ter Return Format definido como Array, e the_field() não consegue ecoar uma estrutura como string. Mude o Return Format para URL ou ID no Field Group, ou use get_field() e acesse a chave url do array antes de exibir com esc_url.
Preciso ativar WP_DEBUG para resolver campos vazios do ACF?
Ajuda muito. Com WP_DEBUG em true no wp-config.php, o WordPress mostra avisos como Trying to get property of non-object na linha exata da chamada, apontando se o campo retorna null ou se você está acessando um array como string. Use apenas em staging, nunca em produção.
As Location Rules afetam se o campo aparece no frontend?
Sim, de forma indireta. As Location Rules determinam a quais telas o Field Group é atribuído. Se a regra aponta para um post type ou template diferente do atual, o campo nem é carregado naquele contexto e a função do tema retorna vazio, mesmo que o nome esteja correto.

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