Como corrigir Undefined array key no PHP 8 do WordPress
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
- 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.
- 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.
- 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.
- 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); - 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.














