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

Como corrigir o Repeater Field que não salva dados no ACF PRO

Time Full Services Time Full Services
Tipo Page Builders
Nome do erro Repeater Field não salva dados no ACF PRO EN: ACF PRO Repeater Field not saving data
Severidade Grave
Descrição O Repeater que não salva no ACF PRO quase sempre perde as últimas linhas porque o PHP descarta variáveis quando o número de campos enviados passa de max_input_vars (padrão 1000). Cada linha do Repeater vira vários campos no POST, então um Repeater grande estoura o limite e grava só parte das linhas, sem erro na tela.

O que é o repeater que não salva no ACF PRO?

O Repeater Field do ACF PRO guarda um conjunto de linhas, e cada linha contém os sub campos que você definiu. No banco, o ACF grava uma linha _nome_do_campo com a contagem de linhas e uma chave separada para cada sub campo de cada índice, no formato nome_do_campo_0_subcampo, nome_do_campo_1_subcampo e assim por diante. Quando você clica em Atualizar, o navegador envia um campo de formulário para cada um desses valores. Se a tela tem um Repeater com muitas linhas e vários sub campos, o total de campos enviados cresce rápido e pode passar do limite de variáveis que o PHP aceita por requisição. O PHP então descarta os campos excedentes silenciosamente, o ACF grava apenas o que recebeu e as linhas finais desaparecem ao recarregar, sem nenhuma mensagem de erro visível no editor.

Como identificar

  • Você adiciona linhas no Repeater, clica em Atualizar e ao recarregar a página só as primeiras linhas continuam lá, as últimas somem.
  • Sempre o mesmo número de linhas sobrevive (por exemplo, sempre 20 das 35 que você criou), o que indica um teto, não um erro aleatório.
  • O post salva normalmente e nenhuma mensagem de erro aparece no editor, mas o conteúdo do Repeater volta incompleto.
  • No debug.log aparece o aviso “Unknown: Input variables exceeded 1000” logo após salvar o post com o Repeater grande.
  • Ao salvar via formulário no frontend com acf_form(), o Repeater grava em branco ou perde linhas, embora os campos simples salvem certo.
Antes de começar: Faça backup do php.ini e do .htaccess antes de editar, porque um erro de sintaxe nesses arquivos derruba o site inteiro. Aumente os limites só o necessário, já que valores muito altos deixam cada requisição consumir mais memória do servidor.

Como prevenir

  • Mantenha max_input_vars em pelo menos 5000 em sites que usam Repeaters grandes ou Flexible Content com muitas linhas.
  • Quebre Repeaters muito extensos em mais de um campo ou ative a paginação do Repeater (ACF 6.0 ou superior) para reduzir as variáveis enviadas por salvamento.
  • Ao salvar Repeater por código ou via acf_form(), use sempre a chave field_xxxx do campo, nunca o nome, para o ACF reconhecer e gravar as linhas.
  • Depois de migrar de servidor, confira max_input_vars e post_max_size na Saúde do Site, pois o padrão pode voltar a 1000.

Causa

  • max_input_vars do PHP em 1000 enquanto um Repeater com muitas linhas e sub campos envia mais de mil variáveis no POST ao salvar o post.
  • Sub campos do Repeater enviados via acf_form() usando o nome do campo no lugar da chave field_xxxx, o que faz o ACF não reconhecer e não gravar as linhas.
  • Grupo de campos importado por Local JSON com o bug de sincronização do ACF 5.7.11, que fez os sub campos perderem o vínculo com o Repeater pai e parar de salvar.
  • post_max_size menor que o tamanho total do POST quando o Repeater tem sub campos de texto longo ou WYSIWYG, cortando a requisição antes de o PHP processar as linhas finais.
  • Plugin de cache de objeto ou de página servindo a tela de edição em cache, fazendo o editor enviar índices de linha defasados que sobrescrevem o que estava salvo.

Como resolver

  1. Confirme o limite atual de variáveis: no wp-admin, vá em Ferramentas, Saúde do Site, Informações e expanda a seção Servidor. Anote o valor de max_input_vars e de post_max_size, pois são esses dois tetos que cortam o Repeater grande.
    Ferramentas -> Saúde do Site -> Informações -> Servidor
  2. Aumente max_input_vars no php.ini: via FTP, edite ou crie o php.ini na raiz do site e suba o limite para folgar o envio de Repeaters extensos. O valor abaixo cobre dezenas de linhas com vários sub campos.
    max_input_vars = 5000
    max_input_nesting_level = 128
  3. Se não houver acesso ao php.ini, use o .htaccess: em servidores Apache com mod_php, force o novo limite adicionando a diretiva ao .htaccess da raiz do site.
    php_value max_input_vars 5000
  4. Suba também o post_max_size se o Repeater tiver textos longos: no php.ini, garanta espaço para o corpo do POST quando os sub campos forem WYSIWYG ou textarea, evitando que a requisição seja cortada antes das últimas linhas.
    post_max_size = 32M
  5. Reinicie o PHP e salve de novo: em hospedagens com PHP-FPM a mudança só vale após reiniciar o serviço pelo painel da hospedagem. Em seguida volte ao post, recrie as linhas que sumiram, clique em Atualizar e confirme que todas permanecem ao recarregar.
    Painel da hospedagem -> Reiniciar PHP
  6. Se ainda perder linhas, ressincronize o grupo de campos: no menu ACF, abra Grupos de Campos, verifique se o Repeater aparece com Sincronizar disponível e clique para reimportar do Local JSON. Isso reconecta sub campos órfãos que o bug de sync deixou sem vínculo com o Repeater pai.
PHP
<?php
// Grava linhas no Repeater pela CHAVE do campo (field_xxxx), nao pelo nome.
// Use a chave que aparece em ACF -> Grupos de Campos ao editar o Repeater.
$post_id   = 123;
$field_key = 'field_64a1b2c3d4e5f'; // chave do Repeater, nao 'minhas_linhas'

$linhas = array(
    array( 'titulo' => 'Linha 1', 'valor' => '10' ),
    array( 'titulo' => 'Linha 2', 'valor' => '20' ),
);

// update_field com a chave garante que o ACF reconheca e persista as linhas.
update_field( $field_key, $linhas, $post_id );

// Eleva o teto so para esta requisicao quando o Repeater for grande (fallback ao php.ini).
if ( (int) ini_get( 'max_input_vars' ) < 5000 ) {
    @ini_set( 'max_input_vars', '5000' );
}

Perguntas frequentes

Por que o Repeater do ACF PRO perde as últimas linhas ao salvar?
Porque cada linha do Repeater envia vários campos no POST e o total ultrapassa o max_input_vars do PHP, que por padrão é 1000. O PHP descarta as variáveis excedentes sem erro e o ACF grava só as linhas que chegaram. Subir o max_input_vars para 5000 resolve na maioria dos casos.
Qual valor de max_input_vars é suficiente para o ACF Repeater?
5000 atende Repeaters com dezenas de linhas e vários sub campos na maioria dos sites. Se o seu Repeater for muito grande ou aninhado, talvez precise de mais. Evite valores exagerados, pois cada requisição passa a consumir mais memória do servidor sem ganho real.
Aumentei o max_input_vars mas o Repeater ainda não salva. O que falta?
Em PHP-FPM a alteração no php.ini só vale após reiniciar o PHP. Alguns hosts ignoram o seu php.ini e impõem o limite no servidor, então teste pelo .htaccess. Se os sub campos forem WYSIWYG longos, suba também o post_max_size, que limita o tamanho total do POST.
O Repeater salva no editor mas não pelo acf_form() do frontend. Por quê?
Quase sempre o formulário do frontend está passando o nome do campo em vez da chave field_xxxx. O ACF identifica o Repeater e os sub campos pela chave, então ao gravar por código ou via acf_form() use a chave do campo. Com o nome, as linhas não são reconhecidas e não persistem.
Esse problema gera alguma mensagem de erro?
Em geral não há erro na tela. Com WP_DEBUG ativo, o debug.log pode registrar o aviso de que as variáveis de entrada excederam o limite. Como o corte é silencioso para o usuário, o sintoma típico é o Repeater voltar com menos linhas do que você criou, sem aviso no editor.
Como saber se o problema é o max_input_vars e não outra coisa?
Se sempre o mesmo número de linhas sobrevive ao salvar, é teto de variáveis, não erro aleatório. Confirme em Ferramentas, Saúde do Site, Informações, Servidor o valor de max_input_vars e compare com a quantidade de campos que o seu Repeater envia. Um teto baixo confirma a causa.
Reduzir o tamanho do Repeater ajuda?
Sim. Ativar a paginação do Repeater no ACF 6.0 ou dividir um Repeater enorme em campos menores reduz quantas variáveis vão no POST de cada salvamento. Isso mantém o envio abaixo do limite e evita o corte mesmo em servidores com max_input_vars mais conservador.
Um Repeater aninhado tem mais risco de não salvar?
Tem, porque cada nível aninhado multiplica os campos enviados no POST e estoura o max_input_vars muito mais rápido. Em Repeaters aninhados, suba o limite com folga, considere paginação e evite empilhar muitos níveis com vários sub campos em cada um deles.

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