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.
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.
// 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';














