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

Como corrigir o conflito de Custom Fields entre ACF PRO e JetEngine no WordPress

Time Full Services Time Full Services
Tipo Page Builders
Nome do erro Conflito de Custom Fields entre ACF PRO e JetEngine EN: ACF PRO and JetEngine custom fields conflict (meta key collision)
Severidade Atenção
Descrição O conflito de Custom Fields entre ACF PRO e JetEngine ocorre quando os dois plugins registram um campo com o mesmo nome de meta e gravam na mesma chave da tabela wp_postmeta, fazendo um sobrescrever o valor salvo pelo outro.

O que é conflito de Custom Fields entre ACF PRO e JetEngine?

O conflito de Custom Fields entre ACF PRO e JetEngine nasce de um detalhe da arquitetura dos dois plugins: ambos guardam o valor de um campo personalizado na tabela wp_postmeta do WordPress, usando o nome do campo como chave (meta key). No ACF, a documentação oficial separa o field key, identificador interno que comeca com field_, do field name, que e exatamente a meta key gravada no banco. O JetEngine, por sua vez, grava o valor de cada meta field também no postmeta usando o slug do campo como meta key. Quando os dois plugins definem campos diferentes com o mesmo nome de meta, eles disputam a mesma linha do banco.

Na prática, o último plugin a salvar o post vence: ao atualizar pelo editor, a meta box do ACF e a meta box do JetEngine escrevem na mesma meta key, e o valor de um substitui o do outro. O resultado e um campo que parece vazio, volta ao valor antigo ou mostra um dado que pertence ao outro plugin. Como o ACF documenta, se duas definicoes compartilham a mesma referencia, a segunda sobrescreve a primeira, e o mesmo principio se aplica quando ACF e JetEngine brigam pela mesma meta key no postmeta.

Como identificar

  • Você preenche um campo no grupo do ACF, salva o post e o valor aparece vazio ou volta para o conteúdo antigo na próxima vez que abre o editor.
  • Um campo criado no JetEngine passa a exibir o valor digitado no campo de mesmo nome do ACF (ou o contrario), como se os dois compartilhassem o mesmo dado.
  • A função get_field(‘nome’) do ACF retorna um valor diferente do que get_post_meta($id, ‘nome’, true) devolve no frontend.
  • Dois campos com o mesmo nome aparecem no editor, um vindo do ACF e outro do JetEngine, e apenas um deles mantem o que você digitou após salvar.
  • Depois de ativar ou reordenar os plugins, campos que funcionavam param de gravar e o conteúdo some sem nenhuma mensagem de erro visivel.
Antes de começar: Antes de renomear meta keys, alterar o modo de armazenamento do JetEngine ou desativar grupos de campos em producao, faça backup completo do site (arquivos e banco de dados) ou trabalhe primeiro em staging. Renomear uma meta key sem migrar os valores antigos deixa os dados orfaos no banco e pode parecer que o conteúdo foi perdido.

Como prevenir

  • Padronize um prefixo de meta key por plugin (por exemplo acf_ para o ACF e je_ para o JetEngine) para que dois campos nunca compartilhem o mesmo nome no postmeta.
  • Defina um único plugin como dono de cada dado: um campo pertence ao ACF ou ao JetEngine, nunca aos dois ao mesmo tempo no mesmo post type.
  • Antes de criar um campo novo, audite as meta keys já em uso no post type para evitar duplicar um Field Name do ACF com um slug do JetEngine.
  • Quando os dois plugins precisarem coexistir no mesmo post type, prefira armazenar os campos do JetEngine em tabela separada para isolar os dados do wp_postmeta usado pelo ACF.

Causa

  • Um grupo de campos do ACF e um meta field do JetEngine usam o mesmo nome de meta (meta key) no mesmo tipo de post, entao ambos gravam na mesma linha do wp_postmeta e o último salvamento sobrescreve o anterior.
  • Os dois plugins anexam uma meta box ao mesmo post type com campos de nome identico; ao salvar o post, o hook save_post de cada plugin escreve a mesma meta key em sequencia, e o que roda por último apaga o valor do outro.
  • O JetEngine esta configurado para gravar os meta fields no wp_postmeta padrão (em vez de uma tabela separada), colidindo diretamente com a meta key que o ACF já usa para aquele campo.
  • Um meta field do JetEngine foi importado ou recriado com o mesmo slug de um field name já existente no ACF, sem que o time percebesse a duplicidade de meta key entre os dois plugins.
  • Código no tema chama update_post_meta() ou update_field() na mesma meta key disputada pelos dois plugins, forcando uma gravacao que ignora o valor mantido pelo ACF ou pelo JetEngine.

Como resolver

  1. Mapeie qual meta key esta em conflito: Identifique o nome do campo que esta sendo sobrescrito. No ACF, abra o grupo de campos e anote o Field Name (e não o Field Label), que e a meta key gravada no banco. No JetEngine, abra a Meta Box e anote o Name/Slug do meta field. Se os dois forem iguais para o mesmo post type, achou a colisao.
    Painel WP -> ACF -> Grupos de Campos -> abra o grupo -> anote o Field Name de cada campo
    Painel WP -> JetEngine -> Meta Boxes -> abra a meta box -> anote o Name/Slug de cada field
    Compare os nomes: meta key igual no mesmo post type confirma o conflito
  2. Renomeie o campo de um dos plugins para uma meta key única: Escolha um plugin para ser o dono daquele dado e renomeie o campo do outro para uma meta key exclusiva, por exemplo com prefixo do plugin. Trocar so o rotulo não resolve; e o Field Name no ACF e o Name/Slug no JetEngine que precisam ficar diferentes. Após renomear, migre os valores antigos da meta key antiga para a nova.
    No JetEngine, renomeie o Name/Slug do field (ex.: de subtitulo para je_subtitulo)
    Ou no ACF, renomeie o Field Name (ex.: de subtitulo para acf_subtitulo)
    Migre os dados antigos da meta key original para a nova antes de remover a duplicata
  3. Faca o JetEngine gravar em uma tabela separada: Se renomear não for viavel, configure a Meta Box do JetEngine para armazenar os custom fields em uma tabela de banco separada, em vez do wp_postmeta padrão. Assim os dados do JetEngine deixam de disputar a mesma meta key usada pelo ACF, eliminando a sobrescrita na origem.
    Painel WP -> JetEngine -> Meta Boxes -> abra a meta box em conflito
    Ative a opção de salvar os campos em uma tabela de banco separada (Save Custom Fields to Separate DB Table)
    Salve e teste a gravacao do campo no editor após a mudanca
  4. Defina um único plugin como fonte do campo no editor: Tenha apenas um plugin exibindo o campo daquele dado no editor do post. Desative o grupo do ACF ou a meta box do JetEngine que duplica o campo, deixando so um responsável por gravar aquela informação, para nenhum dos dois save_post sobrescrever o outro.
    No ACF, abra o grupo duplicado e mude o status para inativo, ou ajuste a regra de localizacao para não casar com o post type
    No JetEngine, remova ou desative o field duplicado da Meta Box do mesmo post type
    Recarregue o editor e confirme que so um campo daquele dado aparece
  5. Valide o valor gravado direto no banco: Depois de aplicar o ajuste, edite um post de teste, preencha o campo, salve e confirme que o valor persiste após recarregar. Para ter certeza de qual plugin gravou, leia a meta key diretamente com get_post_meta e compare com o retorno do ACF.
    Edite um post de teste, preencha o campo e salve
    Recarregue o editor e confirme que o valor permaneceu
    Compare get_post_meta($post_id, 'nome', true) com get_field('nome', $post_id) para validar a origem do dado
PHP
<?php
/**
 * Migra valores de uma meta key antiga (em conflito) para uma nova
 * meta key unica, antes de remover a definicao duplicada de um dos plugins.
 * Rode uma vez (ex.: via WP-CLI eval-file) e depois remova o codigo.
 */
add_action( 'init', 'full_migrar_meta_em_conflito' );
function full_migrar_meta_em_conflito() {
    if ( ! is_admin() || ! current_user_can( 'manage_options' ) ) {
        return;
    }

    $post_type   = 'post';        // post type onde ocorre o conflito
    $meta_antiga = 'subtitulo';   // meta key disputada por ACF e JetEngine
    $meta_nova   = 'je_subtitulo';// nova meta key exclusiva do JetEngine

    $posts = get_posts( array(
        'post_type'      => $post_type,
        'posts_per_page' => -1,
        'fields'         => 'ids',
        'post_status'    => 'any',
    ) );

    foreach ( $posts as $post_id ) {
        $valor = get_post_meta( $post_id, $meta_antiga, true );
        if ( '' === $valor || null === $valor ) {
            continue;
        }
        // So grava se a nova chave ainda nao tiver valor, para nao sobrescrever.
        if ( '' === get_post_meta( $post_id, $meta_nova, true ) ) {
            update_post_meta( $post_id, $meta_nova, $valor );
        }
    }
}

Perguntas frequentes

Por que o valor do meu campo ACF some quando o JetEngine esta ativo
Porque os dois plugins gravam na mesma meta key da tabela wp_postmeta. Quando o ACF e o JetEngine definem campos com o mesmo nome no mesmo post type, o último a salvar o post sobrescreve o valor do outro. Renomeie a meta key de um dos plugins para resolver.
Qual a diferenca entre Field Name e Field Key no ACF
Segundo a documentação do ACF, o Field Key comeca com field_ e e a referencia interna do plugin, enquanto o Field Name e a meta key gravada no wp_postmeta. O conflito com o JetEngine acontece no Field Name, porque e ele que vira a chave no banco de dados.
Renomear so o rotulo do campo resolve o conflito
Não. O rotulo (label) e apenas o texto exibido no editor e não toca no banco. O que precisa ficar único e o Field Name no ACF e o Name/Slug no JetEngine, porque são eles que definem a meta key onde o valor e gravado.
Da para usar ACF PRO e JetEngine no mesmo site sem conflito
Da, desde que os campos dos dois plugins nunca compartilhem a mesma meta key no mesmo post type. Use prefixos diferentes por plugin ou armazene os campos do JetEngine em tabela separada para isolar os dados do postmeta usado pelo ACF.
Como descubro qual plugin gravou o valor de um campo
Leia a meta key direto no banco com get_post_meta e compare com o retorno de get_field do ACF. Se os dois devolverem valores diferentes para o mesmo nome, ha duas definicoes disputando a mesma meta key e uma esta sobrescrevendo a outra.
Armazenar os campos do JetEngine em tabela separada resolve a sobrescrita
Sim. Ao configurar a Meta Box do JetEngine para gravar em uma tabela de banco separada, os dados deixam de usar a mesma linha do wp_postmeta que o ACF ocupa, eliminando a disputa pela meta key na origem do problema.
Preciso migrar os dados antigos ao renomear uma meta key
Sim. Renomear o Field Name ou o slug cria uma nova meta key vazia e deixa os valores antigos presos na chave anterior. Antes de remover a definição duplicada, copie os valores da meta key antiga para a nova para não perder conteúdo.

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