Como corrigir prefixo de tabela duplicado após migração
O que é o prefixo de tabela errado no WordPress?
O problema de prefixo de tabela no WordPress surge quando o valor de $table_prefix no wp-config.php não corresponde mais ao prefixo real das tabelas no banco. Em migrações, algumas ferramentas duplicam o prefixo (gerando wp_wp_) ou trocam o prefixo padrão por outro sem atualizar o arquivo. Como o WordPress monta o nome de cada tabela com esse prefixo, qualquer descompasso faz o site procurar tabelas inexistentes. Pior: a wp_options e a wp_usermeta guardam o prefixo dentro de alguns nomes de opção e de chave (como wp_user_roles e wp_capabilities), então mudar só o nome das tabelas não basta.
Como identificar
- O front mostra erro de banco ou o wp-admin retorna “Sorry, you are not allowed to access this page” após login.
- No phpMyAdmin as tabelas aparecem com prefixo duplicado, como wp_wp_posts em vez de wp_posts.
- Você perdeu o perfil de administrador: entra no painel mas sem permissões de admin.
- O erro começou logo após uma migração ou um plugin de mudança de prefixo de tabela.
Como prevenir
- Defina o prefixo de tabela uma única vez, no início do projeto, e evite trocá-lo depois
- Use ferramentas de migração que preservam o prefixo original em vez de concatená-lo
- Ao mudar o prefixo, atualize sempre as chaves internas na wp_options e na wp_usermeta junto com as tabelas
Causa
- Ferramenta de migração que concatenou o prefixo duas vezes, criando nomes como wp_wp_posts.
- Valor de $table_prefix no wp-config.php diferente do prefixo real das tabelas no banco.
- Mudança de prefixo nas tabelas sem atualizar as chaves internas na wp_options e na wp_usermeta.
- Importação que renomeou as tabelas mas manteve o wp-config.php apontando para o prefixo antigo.
- Plugin de segurança que trocou o prefixo pela metade, deixando tabelas e config dessincronizados.
Como resolver
- Identifique o prefixo real das tabelas: no phpMyAdmin, abra o banco e observe o prefixo que se repete no início das tabelas. Se vir wp_wp_, o prefixo foi duplicado; se vir um prefixo custom, anote-o para usar no wp-config.
- Ajuste o $table_prefix no wp-config.php: via FTP, edite o wp-config.php e defina $table_prefix com o prefixo exato visto no banco, incluindo o sublinhado final. Esse é o caminho mais simples quando você só quer voltar a apontar para as tabelas existentes.
- Renomeie as tabelas se o prefixo estiver duplicado: se preferir limpar o prefixo wp_wp_ de volta para wp_, renomeie cada tabela no phpMyAdmin ou via SQL. Esse caminho exige também ajustar as chaves internas no passo seguinte.
- Corrija as chaves na wp_options e na wp_usermeta: atualize as opções e metas que carregam o prefixo no nome, como user_roles na wp_options e capabilities e user_level na wp_usermeta. Sem isso, você perde o acesso de administrador mesmo com as tabelas certas.
- Teste o login e as permissões: limpe o cache, faça login e confirme que o perfil de administrador voltou com todas as permissões. Se ainda faltar acesso, revise se alguma chave com o prefixo antigo ficou para trás na wp_usermeta.
-- Caso o prefixo tenha duplicado (wp_wp_), renomeie de volta para wp_
RENAME TABLE wp_wp_posts TO wp_posts;
RENAME TABLE wp_wp_options TO wp_options;
-- (repita o RENAME para todas as tabelas wp_wp_*)
-- Corrija as chaves internas que carregam o prefixo no nome
UPDATE wp_options SET option_name = 'wp_user_roles' WHERE option_name = 'wp_wp_user_roles';
UPDATE wp_usermeta SET meta_key = 'wp_capabilities' WHERE meta_key = 'wp_wp_capabilities';
UPDATE wp_usermeta SET meta_key = 'wp_user_level' WHERE meta_key = 'wp_wp_user_level';














