🎉 USE O CUPOM DESCONTO-FULL | 10% OFF acima de R$ 100,00

Como corrigir o loop infinito no Repeater Field do ACF PRO

Time Full Services Time Full Services Pro
Tipo Page Builders
Nome do erro Loop infinito no Repeater Field do ACF PRO EN: ACF PRO Repeater Field infinite loop
Severidade Grave
Descrição O ACF Repeater loop infinito acontece quando o while de have_rows roda sem chamar the_row dentro dele: o ponteiro interno de linha nunca avança, a condição fica sempre verdadeira e o PHP repete a mesma linha até estourar Maximum Execution Time ou a memória.

Conteúdo exclusivo para membros Pro

Faça upgrade para acessar este item completo.

Perguntas frequentes

O que causa o loop infinito no Repeater do ACF PRO?
Na maioria dos casos é a falta da função the_row dentro do while have_rows. A documentação do ACF é clara: have_rows só verifica se há linhas, e quem avança o ponteiro para a próxima é the_row. Sem ela, a condição fica sempre verdadeira e o laço nunca termina.
Por que a página cai com Maximum execution time?
O laço sem fim reexecuta a mesma linha do Repeater indefinidamente e consome todo o tempo de processamento da requisição. O PHP corta o script ao atingir o limite de tempo de execução e registra Maximum execution time exceeded apontando a linha do while have_rows.
Como o Repeater aninhado gera o loop infinito?
Quando o laço interno chama have_rows com o nome do campo do laço externo em vez do nome do sub campo, os dois ponteiros se confundem e o nível interno nunca chega ao fim. Use o nome correto do sub campo no laço interno para que cada have_rows mantenha o próprio ponteiro.
Posso usar get_field em vez de have_rows no Repeater?
Pode, mas get_field devolve o array bruto sem gerenciar o ponteiro de linha, então você precisa percorrer com foreach e ler cada índice na mão. Para iterar com segurança, o padrão recomendado é have_rows com the_row e get_sub_field, que controla o estado do laço por você.
Para que serve a função reset_rows nesse erro?
Ela limpa o estado interno de linha do ACF. Quando o Repeater roda dentro de um loop de posts, o estado de um post pode vazar para o seguinte e manter um laço aberto. Chamar reset_rows ao fim de cada iteração evita esse vazamento entre posts.
Como confirmo qual linha está travando antes de corrigir?
Ative o log de erros do PHP com WP_DEBUG e WP_DEBUG_LOG e abra o arquivo de log. A mensagem de tempo de execução ou de memória aponta o arquivo e a linha exata do while have_rows que ficou aberta, confirmando a causa antes de você publicar a correção.
Por que não devo chamar get_field do Repeater dentro do while?
Reabrir o mesmo Repeater com get_field dentro do laço reposiciona o estado interno e impede o ponteiro de chegar ao fim, mantendo o laço aberto. Dentro do while, leia os valores apenas com get_sub_field, que opera na linha atual sem mexer no ponteiro.

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