# Como corrigir a tradução de Custom Fields do ACF PRO no WPML

A tradução de fields do ACF no WPML não funciona quando a preferência de tradução do campo está em Don't translate ou Copy, quando o grupo de campos não está marcado como traduzível no Multilingual Content Setup, ou quando o ACFML não está ativo. Ajustar a preferência para Translate libera o valor do campo para o idioma traduzido.

## O que é tradução de fields do ACF no WPML?

A tradução de fields do ACF no WPML depende do ACFML (Advanced Custom Fields Multilingual), o componente que vem incluído no WPML e conecta os custom fields ao editor de tradução. Cada campo do ACF recebe uma preferência de tradução que decide o destino do valor entre idiomas: Translate libera o valor para ser traduzido, Copy mantém o mesmo valor em todos os idiomas, Copy Once copia o valor uma única vez para edição independente depois, e Don't translate (padrão de campos ainda não configurados) faz o WPML ignorar o campo. Quando o campo certo está na preferência errada, o valor traduzido simplesmente não aparece no idioma secundário.

O problema também surge no nível do grupo de campos. Em Multilingual Content Setup, o grupo precisa estar configurado como traduzível e com a opção Same fields across languages; campos definidos por PHP ou JSON, sem interface, dependem do filtro acfml_field_group_mode_field_translation_preference ou de uma entrada custom-fields no wpml-config.xml para herdar a preferência correta. Sem ACFML ativo, sem a preferência Translate ou com o grupo fora do Multilingual Content Setup, o WPML não envia o campo ao editor de tradução e o front-end exibe o valor do idioma original ou vazio.

## Como identificar

- O valor de um custom field do ACF aparece igual em todos os idiomas mesmo depois de traduzir a página, em vez de mostrar o texto traduzido.
- O campo do ACF não aparece no Advanced Translation Editor do WPML, então não há onde digitar a tradução.
- O field traduzido fica vazio no idioma secundário enquanto o idioma padrão exibe o valor normalmente.
- No editor de tradução surge o aviso 'Don't translate' ao lado do campo do ACF, sinalizando que ele está sendo ignorado.
- Campos de um Repeater ou Flexible Content somem ou ficam sem os subitens no idioma traduzido após a tradução.

**Antes de começar:** Antes de editar o wpml-config.xml, adicionar filtros via PHP ou alterar preferências de tradução em massa em produção, faça um backup completo do site (arquivos e banco) ou teste primeiro em um ambiente de staging, porque mudar a preferência de um campo já traduzido pode sobrescrever traduções existentes.

## Como prevenir

- Defina a preferência de tradução de cada campo logo ao criar o grupo, em vez de deixar em Don't translate, que é o padrão e faz o WPML ignorar o campo.
- Padronize: textos visíveis em Translate, valores idênticos entre idiomas (números, imagens, opções) em Copy, e estruturas que variam por idioma em Copy Once.
- Para campos registrados por PHP ou local JSON, fixe a preferência com o filtro acfml_field_group_mode_field_translation_preference ou via wpml-config.xml, evitando que nasçam como Don't translate.
- Após qualquer mudança de preferência, limpe o cache do WPML em Support e Troubleshooting e revalide a tradução de uma página de exemplo antes de publicar.

Erros relacionados

- [Como corrigir WPML com tradução que não aparece](https://full.services/wp-fixer/corrigir-wpml-traducao-nao-aparece/)
- [Como corrigir a tradução do Tutor LMS com WPML ou Polylang](https://full.services/wp-fixer/corrigir-traducao-tutor-lms-wpml-polylang/)
- [Como corrigir sitemap multilingue com erro](https://full.services/wp-fixer/corrigir-sitemap-multilingue-erro-wordpress/)

## Causa

- A preferência de tradução do campo está em Don't translate, opção padrão de campos ainda não configurados, fazendo o WPML ignorar o valor e nunca enviá-lo ao editor de tradução.
- O campo de texto está marcado como Copy em vez de Translate, então o WPML replica o valor do idioma original em todos os idiomas e bloqueia a edição da tradução.
- O grupo de campos não está com a opção Same fields across languages no Multilingual Content Setup, deixando o ACFML sem instrução para expor os campos ao editor de tradução.
- Os campos foram registrados via PHP ou local JSON e não têm preferência definida, exigindo o filtro acfml_field_group_mode_field_translation_preference ou uma entrada custom-fields no wpml-config.xml que não foi criada.
- Um Repeater ou Flexible Content está em Copy quando deveria estar em Copy Once, forçando a mesma estrutura entre idiomas e impedindo conteúdo traduzido distinto nos subcampos.
- O ACFML não está ativo em WPML -> Plugins, ou o cache do WPML guardou a configuração antiga de tradução do campo após a alteração da preferência.

## Como resolver

1. Confirme que o ACFML está ativo: O ACFML é o componente do WPML que liga o ACF ao editor de tradução. Sem ele, nenhuma preferência de campo é aplicada. Ative-o na lista de componentes do WPML antes de qualquer outro ajuste.

```
Painel WP -> Plugins -> verifique se 'Advanced Custom Fields Multilingual' está ativo
Painel WP -> WPML -> confirme que o ACF aparece como compatível
```

2. Ajuste a preferência de tradução do campo: Abra o grupo de campos no editor do ACF e defina a preferência de cada campo. Use Translate para textos que mudam por idioma, Copy para valores idênticos como números e imagens, e Copy Once quando quiser começar de uma cópia editável depois. Campos de texto que precisam de tradução não podem ficar em Don't translate nem em Copy.

```
Painel WP -> ACF -> Grupos de Campos -> abra o grupo
Em cada campo de texto defina a preferência de tradução como Translate
Em campos como Número, True/False e Imagem mantenha Copy
```

3. Configure o Multilingual Content Setup do grupo: Ainda no editor do grupo de campos, role até Multilingual Content Setup e garanta que o grupo esteja traduzível com Same fields across languages. Use o modo Expert apenas se precisar de preferências distintas por campo dentro do mesmo grupo.

```
Painel WP -> ACF -> Grupos de Campos -> abra o grupo -> seção Multilingual Content Setup
Selecione 'Same fields across languages'
Use 'Expert' somente para definir preferências campo a campo
```

4. Trate campos de Repeater e Flexible Content: Para Repeater e Flexible Content, escolha Copy quando o layout e o número de itens devem ser iguais entre idiomas, ou Copy Once quando cada idioma pode ter estrutura própria. Os subcampos de texto dentro deles seguem a própria preferência, então marque-os como Translate.

```
Abra o campo Repeater ou Flexible Content no grupo
Defina o campo pai como Copy (estrutura igual) ou Copy Once (estrutura independente)
Marque os subcampos de texto internos como Translate
```

5. Limpe o cache do WPML e re-traduza: Depois de mudar as preferências, limpe o cache do WPML para que as novas regras valham, reabra a tradução da página no editor e salve. O campo passa a aparecer no editor de tradução com o valor pronto para traduzir.

```
Painel WP -> WPML -> Support -> Troubleshooting
Clique em 'Clear the cache in WPML'
Reabra a tradução da página no editor de tradução e salve novamente
```


## Código

```php
<?php
// Define a preferencia de traducao de campos ACF criados via PHP/JSON.
// Valores aceitos pelo ACFML: 'translate', 'copy', 'copy_once', 'nothing'.
add_filter(
    'acfml_field_group_mode_field_translation_preference',
    'full_acf_wpml_field_preference',
    10,
    3
);
function full_acf_wpml_field_preference( $preference, $field, $field_group ) {
    // Campos de texto que precisam ser traduzidos.
    $traduzir = array( 'subtitulo', 'chamada', 'descricao_curta' );
    if ( in_array( $field['name'], $traduzir, true ) ) {
        return 'translate';
    }
    // Campos identicos entre idiomas (ex.: cor, numero, imagem).
    if ( 'cor_destaque' === $field['name'] ) {
        return 'copy';
    }
    return $preference;
}
```

## Perguntas frequentes

### Por que o valor do meu custom field do ACF não muda no idioma traduzido

Quase sempre porque a preferência do campo está em Don't translate ou em Copy. Don't translate faz o WPML ignorar o campo e Copy replica o valor do idioma original. Abra o grupo no ACF e mude o campo de texto para Translate para liberar a edição da tradução.

### Qual a diferença entre Copy e Copy Once na tradução de fields do ACF

Copy mantém o mesmo valor em todos os idiomas e o atualiza sempre que o original muda. Copy Once copia o valor uma única vez para a tradução e depois libera a edição independente em cada idioma, segundo a documentação do WPML para ACF.

### Preciso de qual plugin para traduzir custom fields do ACF com o WPML

Você precisa do ACFML, o Advanced Custom Fields Multilingual, que já vem incluído no WPML e conecta os campos do ACF ao editor de tradução. Sem o ACFML ativo as preferências de tradução dos campos não são aplicadas.

### Onde defino se um grupo de campos do ACF é traduzível

Na seção Multilingual Content Setup do próprio grupo de campos, no editor do ACF. Selecione Same fields across languages para o fluxo padrão ou Expert quando precisar de preferências diferentes por campo dentro do mesmo grupo.

### Como traduzir os campos de um Repeater ou Flexible Content do ACF

Defina o campo pai Repeater ou Flexible Content como Copy quando a estrutura deve ser igual entre idiomas, ou Copy Once quando cada idioma pode ter layout próprio. Os subcampos de texto seguem a própria preferência, então marque-os como Translate.

### Como definir a preferência de tradução para campos do ACF registrados por código

Campos definidos por PHP ou local JSON não têm interface, então use o filtro acfml_field_group_mode_field_translation_preference para fixar a preferência, ou declare a regra de custom-fields no arquivo wpml-config.xml do tema ou plugin.

### Mudei a preferência do campo e a tradução continua errada, o que fazer

Limpe o cache do WPML em WPML, Support, Troubleshooting clicando em Clear the cache in WPML. Depois reabra a tradução da página no editor de tradução e salve de novo para o campo assumir a nova preferência.

**Fonte:** [Advanced Custom Fields — Multilingual Custom Fields (ACF + WPML)](https://www.advancedcustomfields.com/resources/multilingual-custom-fields/)
