Como corrigir o Image Field no ACF PRO
O que é Image Field do ACF que não retorna URL?
O Image Field do ACF PRO tem três opções de Return Format na configuração do campo: Image Array, Image URL e Image ID. Cada opção devolve um tipo de dado diferente quando você lê o campo com get_field. O Image Array devolve um array com chaves como url, alt, width e height. O Image URL devolve só a string da URL. O Image ID devolve o número do anexo na biblioteca de mídia. O erro de não retornar URL acontece quando o template foi escrito esperando a string da URL, mas o campo está configurado como Array ou ID. Como o ACF não dispara erro fatal, o resultado é silencioso: a tag de imagem renderiza com o src vazio, com a palavra Array, ou com um número cru no lugar do caminho do arquivo.
Como identificar
- A imagem não aparece no frontend e o atributo src da tag fica vazio ao inspecionar o HTML.
- No lugar da imagem o navegador imprime a palavra Array como texto, sinal de que o campo devolveu um array e foi tratado como string.
- var_dump do campo imprime um array com as chaves url, alt e sizes em vez de uma string única com o caminho.
- O src da imagem mostra um número inteiro como 482 em vez de um caminho de arquivo, sinal de Return Format igual a Image ID.
- A mensagem Array to string conversion aparece no log de debug quando o template concatena o campo direto na URL.
Como prevenir
- Defina o Return Format do Image Field uma vez por projeto e padronize: Image URL para uso simples no src, Image Array quando precisar de alt e tamanhos.
- Escape toda saída de imagem com esc_url no src e esc_attr no alt antes de imprimir, evitando HTML quebrado por valores inesperados.
- Valide o retorno com uma checagem de vazio antes de montar a tag, porque a imagem pode ter sido apagada da biblioteca de mídia.
- Dentro de Repeater e Flexible Content, sempre leia a imagem com get_sub_field, reservando get_field para campos de nível superior.
Causa
- O Return Format do campo está como Image Array, então get_field devolve um array e o template precisa ler a chave url em vez de usar o valor inteiro.
- O Return Format do campo está como Image ID, então get_field devolve o número do anexo e o caminho do arquivo precisa ser resolvido com wp_get_attachment_image_url.
- O template chama the_field no Image Field, que tenta imprimir o array ou o ID direto e gera a palavra Array ou um número no HTML.
- O campo está dentro de um Repeater ou de um Flexible Content e o código lê get_field do campo pai em vez de get_sub_field dentro do laço, recebendo um valor que não é a URL.
- A imagem foi apagada da biblioteca de mídia depois de selecionada, então o anexo não existe mais e wp_get_attachment_image_url devolve false para aquele ID.
Como resolver
- Descubra qual Return Format o campo devolve: Imprima o valor do campo no template para ver o tipo de dado que o ACF entrega naquele contexto. Se vier um array com a chave url, o campo é Array. Se vier um número, o campo é ID. Se vier uma string com http, o campo já é URL e o problema está em outro lugar.
var_dump( get_field('imagem') ); - Se o campo for Image Array, leia a chave url: Quando o Return Format é Image Array, o caminho do arquivo mora na chave url do array. Acesse essa chave e escape a saída antes de imprimir no atributo src. O array ainda traz alt, width e height para montar a tag completa.
$img = get_field('imagem'); echo esc_url( $img['url'] ); - Se o campo for Image ID, resolva o caminho pelo ID: Quando o Return Format é Image ID, o campo devolve só o número do anexo. Converta esse ID em URL com a função do WordPress, escolhendo o tamanho registrado que você precisa, e escape o resultado.
$id = get_field('imagem'); $url = wp_get_attachment_image_url( $id, 'large' ); echo esc_url( $url ); - Ou troque o Return Format para Image URL no campo: Se o template só precisa do caminho da imagem, ajuste a configuração do campo para devolver a URL pronta. Depois disso get_field passa a devolver a string direta e the_field imprime o caminho sem array. Caminho no menu: Custom Fields -> Field Groups -> seu grupo -> campo de imagem -> Return Format -> Image URL.
Custom Fields -> Field Groups -> [grupo] -> [campo imagem] -> Return Format -> Image URL - Dentro de Repeater ou Flexible Content, use get_sub_field: Se a imagem está em uma linha de Repeater ou em um layout de Flexible Content, o valor só é acessível por get_sub_field dentro do laço have_rows. Ler o campo pai por get_field não devolve a URL da linha atual.
$img = get_sub_field('imagem'); echo esc_url( $img['url'] );
<?php
// Exibe um Image Field do ACF independente do Return Format configurado.
$imagem = get_field( 'imagem' );
if ( is_array( $imagem ) && ! empty( $imagem['url'] ) ) {
// Return Format: Image Array.
printf(
'<img src="%s" alt="%s">',
esc_url( $imagem['url'] ),
esc_attr( $imagem['alt'] )
);
} elseif ( is_numeric( $imagem ) ) {
// Return Format: Image ID.
$url = wp_get_attachment_image_url( (int) $imagem, 'large' );
if ( $url ) {
printf( '<img src="%s" alt="">', esc_url( $url ) );
}
} elseif ( is_string( $imagem ) && $imagem ) {
// Return Format: Image URL.
printf( '<img src="%s" alt="">', esc_url( $imagem ) );
}














