# Como corrigir Call to undefined function no WordPress

O Call to undefined function é um erro fatal de PHP que aparece quando o código chama uma função que não existe naquele ponto: ou o nome está errado, ou a extensão que a fornece está desativada, ou a função do WordPress foi chamada cedo demais. O site cai com erro fatal na página afetada.

## O que é o erro Call to undefined function?

O Call to undefined function no WordPress é o erro fatal que o PHP emite quando tenta executar uma função que não foi declarada no momento da chamada. Isso acontece quando um plugin ou tema usa uma função de outro plugin que está inativo, quando uma extensão do PHP (como mysqli, gd ou curl) não está instalada, ou quando o código chama uma função nativa do WordPress antes do core carregar. Como o PHP não encontra a função, ele para o script na hora e a página não abre.

## Como identificar

- Mensagem "Fatal error: Uncaught Error: Call to undefined function nome_da_função() in /caminho/arquivo.php on line N", citando a função, o arquivo e a linha.
- Variações citando funções do core como "Call to undefined function wp_get_current_user()" ou "Call to undefined function get_header()" quando um arquivo é acessado direto, fora do WordPress.
- Variações citando extensões como "Call to undefined function mysqli_connect()" ou "Call to undefined function curl_init()", indicando extensão do PHP ausente.
- O erro surge logo após ativar ou desativar um plugin, atualizar o PHP do servidor ou colar um snippet no functions.php.

**Antes de começar:** Faça backup do functions.php e do wp-config.php antes de editar. Nunca instale uma extensão do PHP ou troque a versão do PHP em produção sem testar antes em homologação: uma extensão ausente pode derrubar outros plugins ao mesmo tempo.

## Como prevenir

- Declare dependências entre plugins e nunca desative um plugin do qual outro depende sem testar
- Confira em Saúde do site se todas as extensões do PHP exigidas estão ativas após migrar de host ou trocar a versão do PHP
- Envolva chamadas a funções de plugins opcionais em function_exists() nos seus snippets do functions.php

Erros relacionados

- [Como corrigir Parse error / syntax error no PHP](https://full.services/wp-fixer/corrigir-parse-error-syntax-php-wordpress/)
- [Como corrigir Uncaught Error: Class not found](https://full.services/wp-fixer/corrigir-class-not-found-wordpress/)
- [Como corrigir Failed opening required no WordPress](https://full.services/wp-fixer/corrigir-failed-opening-required-wordpress/)

## Causa

- Plugin que fornece a função está desativado, enquanto outro plugin ou o tema ainda tenta chamá-la.
- Extensão do PHP necessária (mysqli, gd, curl, mbstring, intl) não está instalada ou foi desativada no servidor.
- Função nativa do WordPress chamada antes do core carregar, por acessar um arquivo PHP direto pela URL em vez de pelo fluxo do wp-load.
- Nome da função digitado errado ou função que foi removida em uma versão mais nova do plugin/tema.
- Snippet colado no functions.php que depende de um plugin que não está instalado naquele site.

## Como resolver

1. Leia o nome da função e o arquivo no erro: a mensagem cita a função exata e o arquivo que a chamou (ex.: wc_get_product em wp-content/plugins/...). Esse nome diz de onde vem a dependência.
2. Reative o plugin que fornece a função: se a função é de outro plugin (ex.: funções com prefixo wc_ são do WooCommerce), reative esse plugin. O fatal some quando a dependência volta a estar ativa.
3. Confirme a extensão do PHP: se o erro cita mysqli_, curl_, gd_, mb_ ou intl, a extensão do PHP está faltando. Verifique em Ferramentas > Saúde do site > Info, ou peça ao host para ativar a extensão no painel.
4. Reverta a última edição do functions.php: se o erro surgiu após colar um snippet, remova o trecho adicionado por último via FTP. O código que rodava antes volta a funcionar.
5. Proteja chamadas opcionais com function_exists: para snippets que dependem de plugins que podem estar inativos, envolva a chamada em uma checagem para não derrubar o site quando a função não existir.

## Código

```php
// Protege a chamada quando a funcao pode nao existir (plugin opcional inativo).
// Em vez de chamar direto e arriscar o fatal:
if ( function_exists( 'wc_get_product' ) ) {
    $produto = wc_get_product( $id );
} else {
    // WooCommerce inativo: segue sem quebrar o site
    $produto = null;
}

// Para extensoes do PHP, cheque a extensao antes de usar a funcao:
if ( extension_loaded( 'curl' ) ) {
    $ch = curl_init();
}
```

## Perguntas frequentes

### Por que o erro cita uma função do WordPress como get_header?

Quase sempre porque um arquivo PHP do tema ou plugin foi acessado direto pela URL, fora do fluxo do WordPress. Nesse caso o core não carregou e funções nativas não existem ainda. Acesse o site pela home, não pelo caminho do arquivo.

### Call to undefined function mysqli_connect significa o quê?

Que a extensão mysqli do PHP não está instalada ou foi desativada no servidor. É comum após uma migração ou troca de versão do PHP. Ative a extensão mysqli no painel da hospedagem ou peça ao suporte do host.

### Desativei um plugin e apareceu Call to undefined function. Por quê?

Outro plugin ou o tema dependia de uma função fornecida pelo plugin que você desativou. Reative-o, ou ajuste o código dependente para checar a função com function_exists() antes de chamá-la.

### Como descubro de qual plugin é a função do erro?

O prefixo costuma denunciar a origem: wc_ é WooCommerce, edd_ é Easy Digital Downloads, et_ é Divi. Busque o nome da função no diretório wp-content/plugins via FTP para achar o arquivo que a declara.

### O erro apareceu depois de atualizar o PHP. O que mudou?

Versões novas do PHP podem não carregar extensões antigas por padrão, ou o plugin pode usar uma função removida. Confira as extensões em Saúde do site e atualize plugins e tema para versões compatíveis com a nova versão do PHP.

### Posso resolver sem mexer em FTP?

Se a causa é um plugin desativado, basta reativá-lo pelo wp-admin. Se for extensão do PHP, o ajuste é no painel da hospedagem. Só quando o erro vem de um snippet no functions.php é que costuma ser preciso editar o arquivo via FTP.

**Fonte:** [WordPress.org — Debugging in WordPress](https://wordpress.org/documentation/article/debugging-in-wordpress/)
