Como corrigir o Flexible Content que não salva layouts no ACF PRO
O que é o Flexible Content que não salva no ACF PRO?
O Flexible Content do ACF PRO é um campo que monta blocos de conteúdo a partir de layouts, e cada layout pode conter vários subcampos. Cada subcampo de cada linha vira uma entrada própria no formulário enviado quando você atualiza o post. Quando a página tem muitos layouts adicionados (ou layouts com muitos subcampos), o número de variáveis enviadas no POST passa do limite max_input_vars do PHP, que por padrão fica em 1000. O PHP corta tudo o que excede esse limite de forma silenciosa, sem erro fatal. O resultado é que parte dos dados, e às vezes o próprio nonce de validação do ACF, nunca chega ao servidor: o ACF não consegue validar o envio e os layouts somem ou voltam ao estado anterior depois de salvar. A partir da versão 6.3.12 o ACF passou a avisar explicitamente sobre essa falha, em vez de só perder os dados em silêncio.
Como identificar
- Mensagem “ACF was unable to perform validation because no nonce was received by the server.” ao clicar em Atualizar, no topo da tela de edição do post (ACF 6.3.12 ou superior).
- Mensagem “ACF was unable to perform validation because the provided nonce failed verification.” também no topo do editor ao salvar.
- Os layouts do Flexible Content somem ou voltam ao conteúdo antigo logo depois de a página recarregar com a barra verde de “Post atualizado”.
- Só os PRIMEIROS layouts são salvos e os últimos que você adicionou desaparecem, sinal clássico de corte do POST a partir de certo ponto.
- Em Ferramentas -> Saúde do site -> Informações -> Servidor, o valor de max_input_vars aparece em 1000 (ou menor) num post que tem dezenas de subcampos.
- Nenhum aviso quando há poucos layouts; a falha só aparece nas páginas mais cheias, o que confirma a relação com a quantidade de campos.
Como prevenir
- Deixe max_input_vars em 10000 desde a configuração inicial do servidor em sites que usam ACF PRO com Flexible Content.
- Quando um layout precisar de muitos subcampos, prefira quebrar o conteúdo em vários posts ou usar o Repeater com paginação, para não inflar o POST de uma única tela.
- Mantenha o ACF PRO sempre na última versão: a partir da 6.3.12 ele avisa o problema de nonce em vez de perder os dados em silêncio.
- Teste o salvamento de uma página cheia em homologação antes de o cliente montar dezenas de layouts em produção.
Causa
- max_input_vars do PHP em 1000 (valor padrão) enquanto o post tem mais de 1000 variáveis somando todos os layouts e subcampos do Flexible Content; o PHP descarta o excedente e o ACF perde os dados ou o nonce.
- Página com muitos layouts repetidos ou layouts com muitos subcampos (Repeater dentro do Flexible Content, galerias, grupos), multiplicando o número de variáveis enviadas no POST muito além do esperado.
- Erro de JavaScript de outro plugin ou do tema travando a interface do ACF, que é movida a JS; com o JS quebrado o campo não monta o valor a enviar e o Atualizar salva vazio.
- Plugin de segurança ou WAF (como mod_security no servidor) bloqueando ou truncando requisições POST grandes, o que derruba parte dos campos do Flexible Content antes de chegarem ao PHP.
- Field group do Flexible Content sincronizado por JSON local e fora de sincronia com o banco, fazendo o ACF gravar com uma definição de campo diferente da que está sendo editada na tela.
Como resolver
- Confirme o valor atual de max_input_vars: veja o limite que o servidor aplica hoje. Abra a tela de Saúde do site e procure o valor na seção do servidor:
Painel WP -> Ferramentas -> Saúde do site -> Informações -> Servidor -> PHP max input variables - Eleve max_input_vars para pelo menos 10000: a documentação do ACF recomenda no mínimo 10000 para páginas com muitos campos. Ajuste no php.ini (caminho ideal); se não tiver acesso a ele, peça ao seu host para alterar:
max_input_vars = 10000 - Se não houver acesso ao php.ini, use o .htaccess (Apache): em hospedagem Apache com PHP como módulo, dá para definir o limite pelo .htaccess da raiz do site. Adicione a linha e salve:
php_value max_input_vars 10000 - Em PHP-FPM ou CGI, ajuste pelo .user.ini: quando o host roda PHP-FPM (a maioria hoje), o .htaccess não aceita php_value. Crie ou edite o arquivo .user.ini na raiz do site com a linha abaixo e aguarde alguns minutos para o PHP reler:
.user.ini max_input_vars = 10000 - Recarregue, confirme o novo valor e teste o salvamento: volte à Saúde do site e confirme que o valor agora é 10000. Reabra o post, adicione novamente os layouts que sumiram e clique em Atualizar. Os dados devem persistir e os avisos de nonce do ACF devem desaparecer:
Painel WP -> Ferramentas -> Saúde do site -> Informações -> Servidor -> PHP max input variables - Se o aviso persistir, isole conflito de JavaScript: se o salvamento ainda falhar com o limite já em 10000, ligue o modo de scripts não minificados e abra o console do navegador na tela de edição para ver qual plugin trava o JS do ACF. No wp-config.php, ligue:
define( 'SCRIPT_DEBUG', true );
# .htaccess (Apache com PHP como modulo) ou php.ini do site
# Eleva o limite de variaveis de POST para o ACF Flexible Content nao perder layouts.
# A doc do ACF recomenda no minimo 10000 em paginas com muitos campos.
php_value max_input_vars 10000
php_value max_input_time 600
php_value max_execution_time 600














