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

Como corrigir Undefined array key no PHP 8 do WordPress

Time Full Services Time Full Services
Tipo Erro de PHP
Nome do erro Undefined array key no PHP 8 EN: Undefined array key
Severidade Atenção
Descrição O Undefined array key é um aviso do PHP 8 que aparece quando o código tenta ler uma posição de um array que não existe, por exemplo um campo de formulário que não foi enviado. O site segue no ar, mas a mensagem aparece na tela ou enche o debug.log e indica que falta uma verificação no código.

O que é o aviso Undefined array key no PHP 8?

O Undefined array key no PHP 8 do WordPress é o aviso emitido quando o código acessa uma chave de array inexistente, como $_POST[‘campo’] sem que o campo tenha sido enviado, ou $opções[‘cor’] sem que essa opção exista no array. No PHP 7 isso gerava um notice mais discreto; no PHP 8.0 ele virou um Warning, mais visível. Não é fatal, então a página continua carregando, mas o aviso aparece e sinaliza que falta uma checagem de existência (isset ou null coalescing) antes de ler a chave.

Como identificar

  • Mensagem “Warning: Undefined array key “nome_da_chave” in /caminho/arquivo.php on line N”, citando a chave, o arquivo e a linha.
  • Variações com chave numérica, como “Warning: Undefined array key 0”, quando o código espera um item de array que não veio.
  • Os avisos enchem o wp-content/debug.log e podem aparecer no topo de páginas, em formulários ou em telas de configuração de plugins.
  • O problema apareceu logo após o host atualizar a versão do PHP do plano para 8.0 ou superior.
Antes de começar: Faça backup do arquivo antes de editar e nunca remenda o arquivo de um plugin de terceiros direto: a alteração some na próxima atualização. Desligar WP_DEBUG_DISPLAY apenas oculta o aviso do visitante; a correção real é a checagem da chave ou a atualização do plugin.

Como prevenir

  • Sempre cheque chaves de $_POST, $_GET e de opções com isset() ou ?? antes de lê-las
  • Mantenha plugins, tema e o core atualizados para versões compatíveis com o PHP 8
  • Em produção, deixe WP_DEBUG_DISPLAY como false e acompanhe o debug.log

Causa

  • Leitura de $_POST, $_GET ou $_REQUEST com uma chave que nem sempre é enviada (campo de formulário opcional ou ausente).
  • Acesso a uma opção de plugin ou tema antes de ela existir no array salvo, comum na primeira execução após instalar.
  • Plugin ou tema escrito para o PHP 7 que lia chaves inexistentes sem checar, o que só virou Warning no PHP 8.
  • Resultado de uma função (como wp_parse_args ou shortcode_atts) acessado por uma chave que o array retornado não contém.
  • WP_DEBUG e WP_DEBUG_DISPLAY ligados em produção, expondo os avisos ao visitante na tela.

Como resolver

  1. Localize a chave e o arquivo no aviso: a mensagem cita a chave entre aspas, o arquivo e a linha. Isso aponta exatamente qual acesso ao array está sem verificação.
  2. Atualize o plugin ou o tema responsável: se o arquivo citado é de um plugin ou tema, atualize-o. As versões compatíveis com o PHP 8 já protegem esses acessos a array.
  3. Proteja o acesso com isset ou coalescência nula: em código próprio, verifique a chave antes de ler, usando isset() ou o operador de coalescência nula com um valor padrão.
  4. Esconda os avisos do visitante em produção: no wp-config.php, registre os avisos no log mas não os exiba na tela enquanto corrige:
    define('WP_DEBUG', true);
    define('WP_DEBUG_DISPLAY', false);
    define('WP_DEBUG_LOG', true);
  5. Revise o debug.log após corrigir: depois de atualizar plugins e ajustar o código, confira o debug.log para confirmar que os avisos Undefined array key pararam de surgir.
PHP
// ANTES (dispara Warning: Undefined array key quando o campo nao vem):
$cidade = $_POST['cidade'];

// DEPOIS, opcao 1 — coalescencia nula com valor padrao:
$cidade = $_POST['cidade'] ?? '';

// DEPOIS, opcao 2 — checagem explicita antes de usar:
if ( isset( $_POST['cidade'] ) ) {
    $cidade = sanitize_text_field( wp_unslash( $_POST['cidade'] ) );
} else {
    $cidade = '';
}

Perguntas frequentes

Undefined array key derruba o site?
Não. É um Warning, não um erro fatal: a página continua carregando. O incômodo é o aviso aparecer na tela ou encher o debug.log, sinalizando que falta uma checagem antes de ler aquela chave do array.
Por que esse aviso só apareceu depois de atualizar o PHP?
No PHP 7 acessar uma chave inexistente gerava um notice discreto. No PHP 8.0 isso passou a ser um Warning, mais visível. O código não mudou; a versão do PHP que o avalia ficou mais rígida.
Qual a diferença entre isset e o operador de coalescência nula?
isset() retorna verdadeiro ou falso para você decidir o que fazer; o operador ?? já devolve o valor da chave ou um padrão quando ela não existe. Para apenas definir um valor seguro, o ?? é mais curto; para lógica condicional, use isset().
O aviso vem de um plugin. Como corrijo?
Atualize o plugin: as versões feitas para o PHP 8 já protegem esses acessos. Não edite o arquivo do plugin diretamente, porque a alteração é perdida na próxima atualização. Se ele não recebe updates, considere substituí-lo.
Esconder o aviso com WP_DEBUG_DISPLAY resolve de vez?
Não resolve, só oculta o aviso do visitante. O acesso inseguro à chave continua no código. Use essa configuração como medida temporária em produção enquanto atualiza plugins e corrige os snippets próprios.
Esse aviso pode indicar um bug de verdade?
Pode. Às vezes a chave deveria existir e está ausente por causa de um erro de lógica: um campo que não foi salvo, um índice errado. Vale checar se o valor esperado realmente deveria estar ali antes de só silenciar o aviso.

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