Como corrigir o conflito de Meta Boxes entre ACF PRO e JetEngine no WordPress
O que é conflito de Meta Boxes entre ACF PRO e JetEngine?
O conflito de meta boxes entre ACF PRO e JetEngine surge porque os dois plugins fazem a mesma coisa por baixo: registram caixas de campos personalizados (meta boxes) numa tela de edição e guardam o que você digita na tabela wp_postmeta do WordPress. O ACF decide onde mostrar cada grupo de campos por regras de localizacao, formadas por um tipo de localizacao, um operador e um valor, segundo a documentação oficial. O JetEngine, do pacote Crocoblock, tem o próprio módulo de Meta Boxes que faz exatamente o mesmo registro para o mesmo tipo de post.
Quando os dois grupos miram o mesmo post type e, pior, usam o mesmo nome de campo (a mesma meta key), o WordPress passa a ter duas caixas competindo pelo mesmo dado. O editor mostra campos duplicados, o valor salvo por um plugin e lido ou sobrescrito pelo outro, e o usuário tem a impressao de que o campo não salva. O problema não e bug de nenhum dos dois: e dois registradores de meta box gravando no mesmo lugar sem combinarem entre si.
Como identificar
- Duas caixas de campos aparecem na mesma tela de edição do post, uma do ACF e outra do JetEngine, pedindo a mesma informação.
- Você preenche o campo no grupo do ACF, salva o post e o valor aparece em branco ou com o conteúdo antigo ao recarregar a tela.
- O valor digitado na caixa do JetEngine some quando o post e salvo de novo pela caixa do ACF, e vice-versa.
- Um template do JetEngine (Listing Grid ou Dynamic Field) exibe vazio ou desatualizado mesmo com o campo preenchido no ACF.
- Mensagem ‘Notice: meta key already registered’ ou avisos de chave duplicada surgem no log quando WP_DEBUG esta ativo.
Como prevenir
- Defina desde o inicio do projeto qual plugin e o dono dos campos personalizados de cada post type, evitando registrar o mesmo campo no ACF e no JetEngine.
- Padronize um prefixo de meta key por plugin (ex.: acf_ e jet_) para que nunca dois campos diferentes disputem a mesma chave de wp_postmeta.
- Documente as regras de localizacao do ACF e as condicoes de exibicao do JetEngine para que ninguem ative dois grupos na mesma tela de edição por engano.
- Ao migrar um campo de um plugin para o outro, remova o registro antigo e renomeie a meta key no mesmo passe, sem deixar dois donos para a mesma chave.
Causa
- O grupo de campos do ACF e um Meta Box do JetEngine apontam para o mesmo post type pela regra de localizacao do ACF ('Tipo de Post e igual a') e pela condicao equivalente no JetEngine, criando duas caixas na mesma tela.
- Os dois plugins usam a mesma meta key para campos diferentes: o campo do ACF e o campo do JetEngine gravam na mesma chave de wp_postmeta, entao o último a salvar sobrescreve o valor do outro.
- O JetEngine esta com a opção 'Save custom fields meta data into a single field' (armazenar em campo único) divergente do esperado pelo ACF, que grava cada campo em uma meta key separada, fazendo a leitura cruzada falhar.
- Um campo foi migrado do JetEngine para o ACF (ou o contrario) sem renomear a meta key nem remover o registro antigo, deixando dois donos para a mesma chave.
- Uma regra de localizacao customizada registrada via acf_register_location_type sobrepoe a condicao do JetEngine no mesmo contexto de edição, exibindo os dois grupos juntos quando o esperado era apenas um.
Como resolver
- Mapeie quem registra cada campo e a meta key de cada um: Antes de mexer, liste os campos em conflito. Anote a meta key (nome interno) de cada campo no ACF e no JetEngine. Dois campos com a mesma meta key gravando no mesmo post type são a raiz do conflito de meta box.
Painel WP -> ACF -> Grupos de Campos -> abra o grupo e anote o Nome do Campo de cada item Painel WP -> JetEngine -> Meta Boxes -> abra a caixa e anote o Name/Slug de cada campo Compare as duas listas e marque toda meta key que aparece nos dois plugins - Defina um único dono para cada campo: Escolha qual plugin será o dono de cada campo em conflito. A regra prática: se o valor alimenta templates do JetEngine, deixe o campo no JetEngine; se alimenta a lógica do tema ou do PHP via get_field, deixe no ACF. Desative no plugin perdedor o campo que você não escolheu como dono.
No plugin que NÃO será o dono, remova o campo duplicado do grupo/caixa Salve o grupo de campos do ACF e o Meta Box do JetEngine após a remoção - Separe as meta keys quando os dois campos precisam coexistir: Se os dois campos são realmente distintos mas caíram na mesma chave, renomeie a meta key de um deles para um valor único. Isso elimina a sobrescrita porque cada plugin passa a gravar em uma chave própria de wp_postmeta.
Painel WP -> ACF -> abra o campo -> altere o Nome do Campo para um valor exclusivo (ex.: full_preco_acf) Painel WP -> JetEngine -> abra o campo -> ajuste o Name para outra chave (ex.: full_preco_jet) Atualize os templates e o código do tema para apontar para a meta key correta - Alinhe o formato de armazenamento do JetEngine ao do ACF: Confira no Meta Box do JetEngine se a opção de salvar tudo em um único campo esta condizente com o ACF, que grava cada campo em uma meta key separada. Formatos divergentes fazem a leitura cruzada retornar vazio.
Painel WP -> JetEngine -> Meta Boxes -> abra a caixa -> Settings Verifique a opção 'Save custom fields meta data into a single field' e deixe desligada para gravar uma meta key por campo Salve e reedite um post de teste para confirmar que o valor persiste - Restrinja a regra de localizacao para um grupo por tela: Ajuste a regra de localizacao do ACF para que o grupo não apareca na mesma tela em que o JetEngine já entrega a caixa. Use a condicao 'Tipo de Post' e, se preciso, um template de página para isolar cada grupo no contexto certo.
Painel WP -> ACF -> Grupos de Campos -> abra o grupo -> bloco Localizacao Restrinja a regra (ex.: 'Tipo de Post e igual a' apenas onde o ACF deve aparecer) Salve e abra a tela de edição para confirmar que so uma caixa por campo aparece
<?php
// Esconde o grupo de campos do ACF na tela de edicao quando o
// Meta Box do JetEngine for o dono daquele post type, evitando a
// caixa duplicada. Troque 'group_minha_caixa' e 'produto' pelos seus.
add_filter( 'acf/location/rule_match/post_type', 'full_acf_evita_meta_box_duplicado', 20, 3 );
function full_acf_evita_meta_box_duplicado( $match, $rule, $options ) {
$post_type_jetengine_dono = 'produto';
if ( isset( $options['post_type'] ) && $options['post_type'] === $post_type_jetengine_dono ) {
return false; // nao exibe o grupo do ACF nesse post type
}
return $match;
}














