Como corrigir o Clone Field que não duplica campos no ACF PRO
O que é Clone Field do ACF PRO?
O Clone Field do ACF PRO é um campo especial que carrega e exibe outros campos ou grupos de campos já existentes em tempo de execução, em vez de copiá-los no banco de dados. Segundo a documentação oficial do ACF, ele não duplica fisicamente os campos: ele aponta para os campos originais e os renderiza no formulário, funcionando como um módulo reutilizável. Por isso, se o grupo de origem muda ou fica inativo, o Clone reflete essa mudança na hora.
O comportamento de exibição depende da opção Display. No modo Seamless, o Clone é substituído pelos campos selecionados, ideal para reutilizar campos dentro de um Repeater ou Flexible Content. No modo Group, os campos aparecem agrupados sob um rótulo. Quando o Clone não duplica os campos como esperado, o problema costuma estar na configuração de Display, nas opções Prefix Field Names e Prefix Field Labels, ou em um conflito de field_key entre dois clones do mesmo grupo, todos descritos na documentação do ACF.
Como identificar
- Os campos clonados não aparecem no formulário de edição do post quando o Clone Field é adicionado a um grupo, mesmo com o grupo de origem existindo.
- O valor preenchido em um campo clonado não salva: ao recarregar o post o campo volta vazio.
- Dois Clone Fields que apontam para o mesmo grupo salvam um por cima do outro e só o último mantém o valor.
- A função get_field(‘nome_do_campo’) retorna vazio ou null no template, mesmo com o campo preenchido no editor.
- A função have_rows() retorna false ao tentar iterar um campo clonado com Display em Group e layout em Block, e o loop não roda.
- Os rótulos dos campos clonados ficam duplicados ou genéricos quando vários clones do mesmo grupo coexistem na mesma tela.
Como prevenir
- Ative Prefix Field Names sempre que houver mais de um Clone do mesmo grupo na mesma tela, garantindo nomes únicos no banco de dados.
- Padronize o uso de Seamless para clones dentro de Repeater e Flexible Content e reserve o Group para módulos exibidos sob um rótulo.
- Documente, para cada Clone, qual nome usar no get_field conforme o Display e o prefixo, evitando templates que buscam o nome errado.
- Não clone o mesmo subcampo duas vezes na mesma tela: clone grupos distintos para que os field_key não colidam ao salvar.
Causa
- Dois Clone Fields clonam o mesmo subcampo e ambos herdam o field_key idêntico do original; como a documentação do ACF alerta, os subcampos clonados não salvam quando duplicados, pois um sobrescreve o valor do outro.
- A opção Prefix Field Names está desligada nos clones do mesmo grupo: sem o prefixo, os campos clonados gravam sob o mesmo name e colidem ao salvar, em vez de gerar nomes distintos como hero_button_text e welcome_button_text.
- O Display está em Group com layout Block dentro de um Repeater ou Flexible Content: nessa combinação a documentação do ACF afirma que have_rows() retorna false e o subloop do clone não executa.
- O get_field no template usa o nome errado para o modo de Display escolhido: em Seamless sem prefixo é get_field('text'), enquanto em Group com Prefix Field Names é get_field('main_button_text') ou o grupo inteiro via get_field('main_button').
- O grupo de campos de origem referenciado pelo Clone está com o status Active desativado ou foi renomeado, então o Clone não encontra os campos originais e exibe o formulário vazio.
Como resolver
- Ative o prefixo de nomes em clones do mesmo grupo: Quando dois Clone Fields apontam para o mesmo grupo, abra cada Clone em ACF, Grupos de Campos e marque a opção Prefix Field Names. Sem ela os clones gravam sob o mesmo name e um sobrescreve o outro ao salvar, segundo a documentação do ACF.
Painel WP -> ACF -> Grupos de Campos -> abra o grupo com o Clone Field Edite o Clone Field e marque Prefix Field Names (Prefixar nomes dos campos) Defina um rótulo distinto por Clone (ex.: Hero, Welcome) para nomes únicos - Escolha o Display correto para o contexto: Use Seamless para reutilizar campos dentro de Repeater ou Flexible Content, e Group para reaproveitar um grupo ou módulo como um conjunto. A documentação do ACF indica que have_rows() retorna false com Display em Group e layout Block, então prefira Seamless nesse cenário de subloop.
Painel WP -> ACF -> Grupos de Campos -> abra o Clone Field No campo Display, selecione Seamless para subloops em Repeater/Flexible Content Use Group apenas quando precisar do conjunto sob um rótulo único - Corrija o nome usado no get_field do template: Ajuste a chamada get_field ao modo de Display e ao prefixo configurado. Em Seamless sem prefixo o subcampo é acessado direto pelo nome original; em Group com Prefix Field Names use o nome prefixado ou recupere o grupo inteiro como array.
Seamless sem prefixo: get_field('text') Group com Prefix Field Names: get_field('main_button_text') Grupo inteiro como array: get_field('main_button') - Confirme que o grupo de origem está ativo: Abra o grupo de campos que o Clone referencia e garanta que ele está marcado como Active. Um grupo de origem inativo ou renomeado faz o Clone não encontrar os campos e exibir o formulário vazio.
Painel WP -> ACF -> Grupos de Campos -> abra o grupo de origem Marque o status como Active (Ativo) e salve Reabra o post para confirmar que os campos clonados voltaram - Evite clonar o mesmo subcampo duas vezes na mesma tela: Se ainda houver perda de dados, reestruture para não ter dois clones do mesmo subcampo na mesma tela, pois eles compartilham o field_key e colidem mesmo com prefixo. Clone grupos distintos ou crie cópias separadas dos campos quando precisar de valores independentes.
Painel WP -> ACF -> Grupos de Campos -> revise os Clone Fields da tela Remova o segundo Clone que duplica o mesmo subcampo do original Crie campos próprios ou clone grupos diferentes para valores independentes
<?php
// Lê valores de um Clone Field conforme o modo de Display configurado no ACF PRO.
// Display = Seamless, SEM prefixo: o subcampo é acessado pelo nome original.
$texto = get_field( 'text' );
// Display = Group, COM Prefix Field Names (rótulo do Clone = 'Main'):
$texto_prefixado = get_field( 'main_button_text' );
// Recupera o grupo clonado inteiro como array (Display = Group):
$grupo = get_field( 'main_button' );
if ( $grupo ) {
echo esc_html( $grupo['button_text'] );
echo esc_url( $grupo['button_url'] );
}














