Como corrigir o Repeater Field que não salva dados no ACF PRO
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.
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
- 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 - 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 - 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 - 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 - 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 - 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
// 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' );
}














