Como corrigir o conflito de meta boxes entre JetEngine e ACF PRO no WordPress
O que é conflito de meta boxes entre JetEngine e ACF PRO?
JetEngine e ACF PRO são dois plugins que adicionam campos personalizados ao WordPress, e cada um cria suas proprias caixas de campos (meta boxes) na tela de edição de posts. O JetEngine guarda os valores no Meta Box atrelado a um tipo de conteúdo, enquanto o ACF PRO usa grupos de campos registrados por regra de localizacao. Internamente, os dois gravam o valor na tabela wp_postmeta usando o Name (ACF) ou o Slug do campo (JetEngine) como meta key. O conflito de meta boxes aparece quando esses dois nomes coincidem no mesmo tipo de post: o editor passa a mostrar dois campos para o mesmo dado, e o último plugin que salva o post grava por cima do valor do outro.
A documentação oficial do ACF deixa explicito que o parametro Name de um campo e o que ele usa para salvar e carregar o dado, e alerta que registrar dois campos ou dois grupos com a mesma chave faz o segundo sobrescrever o primeiro. Por isso, quando JetEngine e ACF PRO disputam a mesma meta key, o resultado e valor que some, dado que volta ao antigo depois de salvar, ou um campo que aparece vazio no frontend porque a função get_field do ACF deixou de ler meta não registrada como campo ACF a partir da versão 5.11.
Como identificar
- Dois campos identicos aparecem na tela de edição do post: um vindo do Meta Box do JetEngine e outro do grupo de campos do ACF PRO, ambos pedindo o mesmo dado.
- O valor digitado some ou volta ao valor anterior depois de clicar em Atualizar, porque o outro plugin gravou por cima na mesma meta key.
- No frontend o campo aparece vazio mesmo com dado preenchido no editor, já que a função get_field do ACF não retorna o valor que o JetEngine salvou.
- O macro Get Meta Field ou o widget Dynamic Field do JetEngine exibe um valor diferente do que o editor mostra para o mesmo post.
- Ao alternar entre editar pelo JetEngine e pelo ACF PRO, cada plugin mostra um valor distinto para o que deveria ser o mesmo campo.
Como prevenir
- Defina uma convencao de nomes de meta key por plugin desde o inicio, por exemplo sufixo _acf para campos do ACF e _jet para campos do JetEngine, para que nunca coincidam no mesmo tipo de post.
- Use apenas um plugin de campos personalizados como fonte de verdade de cada dado, e reserve o outro so para exibir ou consultar, sem registrar o mesmo campo duas vezes.
- Antes de criar um campo novo, confira a lista de Slugs do JetEngine e de Names do ACF do mesmo tipo de post para garantir que a string e única.
- Documente, no repositorio do tema ou em uma planilha, qual plugin e dono de cada campo e como o frontend le esse dado, evitando que outra pessoa recrie o campo no plugin errado.
Causa
- O Slug do campo no Meta Box do JetEngine e identico ao Name de um campo do grupo do ACF PRO, fazendo os dois gravarem na mesma chave meta_key da tabela wp_postmeta e um sobrescrever o outro ao salvar.
- O Meta Box do JetEngine e o grupo de campos do ACF PRO estão atrelados ao mesmo tipo de post pela regra de localizacao, duplicando o campo na tela de edição do mesmo conteúdo.
- Um campo foi criado primeiro no ACF PRO e depois recriado no JetEngine com o mesmo slug para reaproveitar dados antigos, sem migrar a meta key, o que coloca os dois plugins disputando a mesma chave.
- O frontend le o dado com get_field do ACF, mas o valor foi gravado pelo JetEngine: desde o ACF 5.11 o get_field não retorna mais meta que não pertence a um campo ACF registrado, entao o valor do JetEngine aparece como vazio.
- Um campo do tipo galeria, repeater ou relacionamento e salvo em formato serializado diferente por cada plugin na mesma meta key, corrompendo a leitura quando o outro plugin tenta interpretar o valor.
Como resolver
- Identifique a meta key duplicada: Liste o Slug de cada campo do Meta Box do JetEngine e o Name de cada campo do grupo do ACF PRO atrelados ao mesmo tipo de post. O conflito ocorre quando os dois usam exatamente a mesma string, porque essa string vira a meta_key na tabela wp_postmeta.
Painel WP -> JetEngine -> Meta Boxes -> abra o Meta Box e anote o Slug de cada campo Painel WP -> ACF -> Grupos de Campos -> abra o grupo e anote o Name de cada campo Compare as duas listas e marque toda string que aparece nos dois plugins - Decida qual plugin será o dono de cada campo: Escolha um único plugin para gerenciar cada dado em vez de manter o campo nos dois. Use o ACF PRO quando o frontend le com get_field, e o JetEngine quando o dado alimenta Listing Grid, Dynamic Field ou Query Builder. Manter o campo em apenas um plugin elimina a disputa pela meta key.
Mapeie cada campo conflitante para um único dono: ACF PRO ou JetEngine Liste os campos que serão removidos do plugin perdedor - Renomeie ou remova o campo duplicado no plugin perdedor: No plugin que não será o dono, remova o campo conflitante ou altere o Slug ou Name para uma string única que não exista no outro plugin. Isso separa as meta keys e impede a sobrescrita. Renomear, e não apagar, preserva o histórico se houver dados antigos para migrar.
JetEngine: edite o Meta Box e troque o Slug do campo, por exemplo de preco para preco_jet ACF PRO: edite o grupo e troque o Name do campo, por exemplo de preco para preco_acf Salve o Meta Box ou o grupo de campos após a alteração - Migre os dados antigos para a nova meta key: Se já havia valores gravados na meta key antiga, copie-os para a nova chave usando o código de migração da seção de código abaixo. Sem essa migração, os posts existentes ficam com o campo vazio depois da renomeacao. Rode o código uma única vez e remova-o em seguida.
Adicione o código de migração em um plugin de snippet ou no functions.php do tema filho Acesse uma página do admin uma vez para disparar a migração no hook admin_init Confirme que os valores migraram e remova o código do site - Ajuste o frontend para ler a fonte correta: Garanta que o template do frontend leia o campo pelo plugin que virou dono. Se o ACF PRO e o dono, use get_field com o Name atualizado; se o JetEngine e o dono, use o widget Dynamic Field ou o macro Get Meta Field com o Slug atualizado. Misturar as fontes recria o sintoma do valor vazio.
ACF dono: troque get_field('preco') por get_field('preco_acf') no template JetEngine dono: no Dynamic Field aponte Meta Field para preco_jet Limpe o cache do site e recarregue a página para validar o valor
<?php
// Migra o valor de uma meta key antiga (compartilhada) para a nova key unica.
// Rode UMA vez e remova o snippet em seguida.
add_action( 'admin_init', 'full_migrar_meta_key_conflito' );
function full_migrar_meta_key_conflito() {
if ( get_option( 'full_meta_key_migrada' ) ) {
return; // ja rodou, nao repete
}
$post_type = 'imovel'; // tipo de post afetado
$key_antiga = 'preco'; // meta key que JetEngine e ACF disputavam
$key_nova = 'preco_acf'; // novo Name unico do campo dono
$posts = get_posts( array(
'post_type' => $post_type,
'post_status' => 'any',
'posts_per_page' => -1,
'fields' => 'ids',
) );
foreach ( $posts as $post_id ) {
$valor = get_post_meta( $post_id, $key_antiga, true );
if ( '' === $valor || null === $valor ) {
continue; // nada para migrar neste post
}
update_post_meta( $post_id, $key_nova, $valor );
}
update_option( 'full_meta_key_migrada', 1 );
}














