Como corrigir a tradução de Custom Fields do ACF PRO no WPML
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.
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.
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
- 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 - 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 - 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 - 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 - 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
<?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;
}














