🎉 USE O CUPOM FIM.DE.SEMANA.FULL | 20% OFF acima de R$ 100,00

Como corrigir o conflito de meta boxes entre JetEngine e ACF PRO no WordPress

Time Full Services Time Full Services
Tipo Page Builders
Nome do erro Conflito de meta boxes entre JetEngine e ACF PRO EN: JetEngine and ACF PRO meta box conflict (duplicate meta key)
Severidade Atenção
Descrição O conflito de meta boxes entre JetEngine e ACF PRO acontece quando os dois plugins registram campos com o mesmo nome (a mesma meta key) no mesmo tipo de post, fazendo um sobrescrever o valor do outro ao salvar e gerando campos duplicados no editor.

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.
Antes de começar: Antes de renomear campos ou rodar o código de migração de meta key, faça um backup completo do site (arquivos e banco de dados) ou teste primeiro em um ambiente de staging. A migração escreve direto na tabela wp_postmeta e, sem backup, um slug errado pode apagar os valores dos posts.

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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
<?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 );
}

Perguntas frequentes

Por que JetEngine e ACF PRO mostram dois campos iguais no editor
Porque os dois plugins estão atrelados ao mesmo tipo de post e registraram um campo com o mesmo nome. Cada plugin desenha sua própria caixa de campos na tela de edição, entao o mesmo dado aparece duplicado. Mantenha o campo em apenas um dos plugins para o editor parar de exibir os dois.
O valor do meu campo some depois que salvo o post
Isso acontece quando o JetEngine e o ACF PRO gravam na mesma meta key e o último plugin a salvar sobrescreve o valor do outro. Renomeie o Slug ou o Name do campo no plugin que não será o dono para que cada um use uma chave distinta na tabela wp_postmeta.
Por que o get_field do ACF não le o valor salvo pelo JetEngine
Desde o ACF 5.11, segundo a documentação oficial, o get_field deixou de retornar meta que não pertence a um campo ACF registrado. Se o dado foi gravado pelo JetEngine, o get_field devolve vazio. Use o get_post_meta para ler a chave crua ou faça o ACF ser o dono daquele campo.
Posso usar JetEngine e ACF PRO no mesmo site sem conflito
Sim. O conflito so ocorre quando os dois registram campos com o mesmo nome no mesmo tipo de post. Adote uma convencao de nomes que nunca coincida, por exemplo sufixo _jet e _acf, e cada plugin gerencia seus próprios campos sem disputar a meta key.
Como descubro qual meta key esta em conflito
Abra o Meta Box no JetEngine e anote o Slug de cada campo, depois abra o grupo no ACF PRO e anote o Name de cada campo do mesmo tipo de post. Toda string que aparecer nas duas listas e uma meta key em conflito que precisa ser renomeada em um dos plugins.
Renomear o campo apaga os dados já gravados
Renomear o Slug ou o Name não apaga o valor antigo, mas o novo campo passa a ler uma chave vazia até você migrar o dado. Use o código de migração para copiar o valor da meta key antiga para a nova e so depois confie no campo renomeado.
Qual plugin devo escolher como dono do campo
Escolha o ACF PRO quando o frontend le o dado com get_field em templates PHP, e o JetEngine quando o dado alimenta Listing Grid, Dynamic Field ou Query Builder. O importante e que cada campo tenha um único dono para não haver duas gravacoes na mesma chave.

Seja PRO.

Tenha acesso a snippets de código premium — PHP, JavaScript, CSS e HTML prontos para usar em seus projetos.

Conhecer o plano Pro →

Uma nova era para o WordPress.

A FULL Services redefine o CMS com uma arquitetura modular que transforma o WordPress em um motor de crescimento digital. 

Painéis personalizados

Um novo nível de controle para o WordPress. Acompanhe métricas, automações e evolução do seu site em um único painel visual.

A força por trás de grandes marcas

Para agências, estúdios e profissionais independentes que desejam oferecer soluções de alto nível com sua própria marca.

Componentes

Hero Sections

30 componentes

Seções de CTA

14 componentes

Login

14 componentes

Blog

14 componentes

Cabeçalhos

24 componentes

Seções de FAQ

53 componentes

Cadastro

53 componentes

Blog individual

53 componentes

Rodapés

28 componentes

Seções de contato

27 componentes

Seções de preços

27 componentes

Faixas

27 componentes

Portfólio

16 componentes

Seções de equipe

12 componentes

Números

12 componentes

Logotipos

12 componentes