Como corrigir Cannot redeclare function
O que é o erro Cannot redeclare function?
No PHP, cada função declarada com a palavra function só pode existir uma vez por execução. O WordPress carrega o tema e todos os plugins ativos numa mesma requisição, então se duas partes do código declaram uma função com o mesmo nome, o PHP encontra a segunda declaração, percebe que o nome já existe e aborta com “Cannot redeclare”. O erro aponta o arquivo e a linha da declaração duplicada, e o site para porque é um erro fatal, não um simples aviso.
Como identificar
- Mensagem “Fatal error: Cannot redeclare nome_da_função() (previously declared in /caminho/arquivo.php:N)”.
- A mensagem cita dois arquivos: onde a função foi declarada primeiro e onde a duplicata aparece.
- O erro surge após colar um snippet duas vezes no functions.php ou ativar um segundo plugin parecido.
- O site ou só o wp-admin trava na linha do erro, mostrando apenas a mensagem fatal.
Antes de começar: Faça backup do functions.php antes de editar e evite o Aparência > Editor de temas: um erro fatal salvo por ali pode trancar o wp-admin e exigir correção via FTP. Edite snippets por FTP ou por um plugin de snippets que valida o código.
Como prevenir
- Use prefixos únicos nos nomes de função (ex.: meusite_função) para evitar colisões com plugins e temas
- Envolva suas funções globais em if ( ! function_exists() ) antes de declará-las
- Prefira require_once e include_once para arquivos de funções, nunca a versão sem _once
Causa
- Snippet com uma função colado duas vezes no functions.php do tema.
- Dois plugins ativos que declaram uma função com exatamente o mesmo nome no escopo global.
- Arquivo PHP incluído duas vezes via include em vez de include_once, redeclarando a função.
- Função copiada de um tutorial sem o nome ter sido renomeado, colidindo com uma já existente no tema.
- Plugin antigo e sua versão atualizada coexistindo na pasta, ambos declarando a mesma função.
Como resolver
- Leia os dois arquivos citados no erro: a mensagem mostra onde a função foi declarada primeiro e onde está a duplicata. Abra os dois caminhos via FTP para comparar.
- Remova a declaração duplicada: se você colou o mesmo snippet duas vezes no functions.php, apague a segunda cópia. A função declarada uma única vez volta a funcionar.
- Se forem dois plugins, desative um: quando a colisão é entre plugins, desative o plugin menos essencial pela tela de plugins ou renomeando a pasta dele via FTP. Procure uma alternativa que não use o mesmo nome de função.
- Proteja a função com function_exists: no seu próprio código, envolva a declaração em uma checagem que só define a função se ela ainda não existir, evitando o conflito:
if ( ! function_exists( 'minha_função' ) ) { /* declaracao aqui */ } - Use include_once para arquivos incluídos: se o problema vem de um arquivo carregado mais de uma vez, troque include por include_once ou require por require_once, para o PHP carregar o arquivo só na primeira chamada.
PHP
// ERRO: a mesma funcao declarada duas vezes na execucao
function meu_rodape() { echo 'Rodape'; }
function meu_rodape() { echo 'Rodape'; } // <- Cannot redeclare
// CORRETO: so declara se o nome ainda nao existir
if ( ! function_exists( 'meu_rodape' ) ) {
function meu_rodape() {
echo 'Rodape';
}
}
// Para arquivos incluidos, use a variante _once
require_once get_template_directory() . '/inc/helpers.php';
Perguntas frequentes
O que causa o erro Cannot redeclare function no WordPress?
Uma função PHP com o mesmo nome foi declarada duas vezes na mesma execução. Quase sempre é um snippet colado em duplicidade no functions.php ou dois plugins que definem uma função homônima no escopo global. O PHP encontra a duplicata e aborta com erro fatal.
Como sei qual arquivo tem a função duplicada?
A própria mensagem cita os dois caminhos: onde a função foi declarada primeiro (previously declared in) e onde está a segunda declaração que disparou o erro. Abra os dois arquivos via FTP e compare as linhas indicadas.
function_exists resolve de vez o Cannot redeclare?
Resolve quando o conflito está no seu próprio código: envolver a declaração em if ( ! function_exists() ) impede a segunda criação. Se a colisão é entre dois plugins de terceiros, a solução real é desativar um deles ou trocá-lo por outro.
Dois plugins declaram a mesma função. O que faço?
Desative o plugin menos essencial pela tela de plugins ou renomeando a pasta dele via FTP, e procure uma alternativa. Plugins bem escritos prefixam suas funções, então a colisão costuma indicar que um dos dois foi mal codificado.
Qual a diferença entre include e include_once?
O include carrega o arquivo toda vez que é chamado; se ele declara funções e for incluído duas vezes, gera Cannot redeclare. O include_once carrega o arquivo apenas na primeira chamada, então é a escolha certa para arquivos que definem funções.
O erro travou meu wp-admin. Como volto a entrar?
Acesse o site via FTP, abra o functions.php do tema ou desative o plugin culpado renomeando a pasta dele dentro de wp-content/plugins. Removida a declaração duplicada, o erro fatal desaparece e o painel volta a carregar.














