Como corrigir o Flexible Content do ACF PRO que não renderiza no Elementor
O que é Flexible Content do ACF PRO que não renderiza no Elementor?
O Flexible Content e um campo do ACF PRO que guarda blocos de conteúdo em layouts repetiveis, cada layout com seus próprios sub campos. Diferente de um campo de texto ou imagem, ele não retorna um único valor: o ACF so entrega os dados dentro de um loop, onde você percorre cada linha com have_rows e the_row, descobre qual layout esta ativo com get_row_layout e le os sub campos com get_sub_field ou the_sub_field. O Elementor Pro injeta dados do ACF no canvas pela Dynamic Tag ACF Field, mas essa tag foi feita para campos escalares simples. Quando você aponta a Dynamic Tag para um campo Flexible Content, o Elementor pede um valor pronto, o ACF não tem valor pronto para entregar (so o loop), e o widget renderiza vazio no editor e no frontend. O problema, portanto, não e bug do Elementor nem do ACF: e incompatibilidade de formato entre um campo de loop e uma tag que espera um escalar.
Como identificar
- Você aponta a Dynamic Tag ACF Field do Elementor para um campo Flexible Content e o widget fica totalmente em branco no editor e no frontend.
- Na lista de campos da Dynamic Tag ACF Field, o campo Flexible Content nem aparece, ou aparece mas seleciona-lo não muda nada na previa.
- Campos de texto e imagem comuns do mesmo grupo ACF renderizam normalmente pela Dynamic Tag, mas o Flexible Content continua vazio.
- Os layouts do Flexible Content aparecem certos no painel do post (ao editar o conteúdo), porém somem ao tentar exibir pelo Elementor.
- Ao inspecionar o frontend, o container do widget existe no HTML mas vem sem nenhum dos sub campos dos layouts, como se o campo estivesse vazio.
Como prevenir
- Use a Dynamic Tag ACF Field do Elementor apenas para campos simples (texto, número, imagem, link) e reserve um shortcode ou template com loop para campos estruturados como Flexible Content, Repeater e Group
- Documente os nomes dos layouts e dos sub campos do Flexible Content no momento de criar o grupo, para o loop do shortcode referenciar exatamente as mesmas chaves
- Teste o shortcode num post de exemplo com todos os layouts preenchidos antes de publicar o template do Theme Builder, evitando confundir campo vazio com loop quebrado
- Mantenha o Elementor Pro com licenca ativa e o ACF PRO atualizado, e padronize o uso do tema-filho para que mudancas no functions.php sobrevivam a atualizações do tema
Causa
- O Flexible Content e um campo de loop e não retorna valor direto: o ACF so entrega os dados dentro de have_rows e the_row, entao a Dynamic Tag ACF Field do Elementor, que espera um escalar pronto, recebe nada e renderiza vazio.
- A Dynamic Tag ACF Field do Elementor Pro suporta campos simples (text, number, image, url, true_false), mas não itera Flexible Content, Repeater ou Group, que dependem de get_row_layout e get_sub_field para serem lidos.
- Tentativa de exibir o Flexible Content fora de um loop: sem percorrer cada linha com the_row e identificar o layout com get_row_layout, os sub campos de cada layout nunca são acessados e nada e impresso.
- Elementor Pro inativo ou licenca expirada: a Dynamic Tag ACF Field so existe no Elementor Pro, entao no Elementor gratuito nem o campo simples aparece para conteúdo dinamico, quanto mais o Flexible Content.
- Regra de local do grupo de campos ACF não casa com o post ou template editado no Elementor, fazendo o campo Flexible Content nem existir naquele contexto e qualquer tentativa de exibicao retornar vazio.
- Edição dentro de um template do Theme Builder cuja Preview aponta para um post sem layouts preenchidos no Flexible Content, dando a impressao de campo vazio mesmo com a lógica de loop correta.
Como resolver
- Entenda por que a Dynamic Tag não basta: confirme que o widget esta apontado para um campo Flexible Content e aceite que a Dynamic Tag ACF Field não itera esse tipo de campo. Ela foi feita para campos escalares simples; Flexible Content precisa de um loop. Por isso a solução e renderizar o loop por um shortcode e inserir esse shortcode no Elementor, em vez de usar a Dynamic Tag direto no widget.
Selecione o widget -> ícone de conteúdo dinâmico -> ACF Field (confirme que aponta para o Flexible Content) Remova a Dynamic Tag desse campo de loop; ela ficará sempre vazia - Crie um shortcode que percorra os layouts do Flexible Content: no functions.php do tema-filho, registre um shortcode que rode o loop oficial do ACF com have_rows, the_row e get_row_layout, montando o HTML de cada layout. Use o código de exemplo na seção de código abaixo e troque os nomes de campo e de layout pelos seus. Esse shortcode e o que entrega o conteúdo que a Dynamic Tag não consegue.
Edite wp-content/themes/seu-tema-filho/functions.php Registre o shortcode com add_shortcode (ver bloco de código) Troque 'conteúdo_flexivel' e os nomes de layout pelos do seu grupo ACF - Insira o shortcode no Elementor pelo widget Shortcode: arraste o widget Shortcode do Elementor para o ponto da página onde o Flexible Content deve aparecer e cole a tag do shortcode que você registrou. O Elementor executa o shortcode no render, o loop roda e os layouts aparecem. Esse widget existe no Elementor gratuito e no Pro.
Painel de widgets do Elementor -> Geral -> Shortcode [flexible_content] - Garanta o contexto correto do post e da licenca: verifique que o Elementor Pro esta ativo com licenca valida, que a regra de local do grupo ACF inclui o tipo de post editado e que, em templates do Theme Builder, a previa aponta para um post com layouts preenchidos. Sem isso o campo não existe no contexto e o loop, mesmo correto, não tem o que iterar.
WP Admin -> Plugins -> confirmar Elementor Pro ativado WP Admin -> Elementor -> Licença -> status Conectado/Ativo WP Admin -> ACF -> Grupos de campos -> Local -> incluir o tipo de post do template Editor do template -> Configurações de Pré-visualização -> apontar para post com layouts - Regenere os arquivos e limpe o cache: depois de inserir o shortcode, regenere os arquivos e dados do Elementor e limpe qualquer cache de página, porque o Elementor guarda o CSS e o HTML renderizado e pode estar servindo a versão vazia antiga do widget.
WP Admin -> Elementor -> Ferramentas -> Regenerar Arquivos e Dados Limpe o cache do plugin de cache e do servidor
// functions.php do tema-filho — renderiza um campo Flexible Content do ACF PRO
// via shortcode, para inserir no widget Shortcode do Elementor.
// Troque 'conteudo_flexivel' pelo nome do seu campo e os nomes de layout/sub campo pelos seus.
add_shortcode( 'flexible_content', function () {
if ( ! function_exists( 'have_rows' ) ) {
return ''; // ACF inativo
}
ob_start();
if ( have_rows( 'conteudo_flexivel' ) ) {
while ( have_rows( 'conteudo_flexivel' ) ) {
the_row();
$layout = get_row_layout();
if ( 'bloco_texto' === $layout ) {
echo '<div class="fc-texto">';
echo wp_kses_post( get_sub_field( 'texto' ) );
echo '</div>';
} elseif ( 'bloco_imagem' === $layout ) {
$img = get_sub_field( 'imagem' ); // Return Format = Image URL
if ( $img ) {
echo '<div class="fc-imagem"><img src="' . esc_url( $img ) . '" alt="" /></div>';
}
}
}
}
return ob_get_clean();
} );














