In breve: il warning Undefined array key appare quando PHP prova a leggere una chiave che non esiste in un array. In WordPress la causa è spesso un plugin, un tema o uno snippet che non controlla un dato prima di usarlo. Il messaggio va diagnosticato dal file, dalla riga e dall’azione che lo genera: nasconderlo non corregge il codice.
Indice dei contenuti
Che cosa significa il warning
Un array PHP associa valori a chiavi, per esempio $dati['email']. Se la chiave email non è presente e il codice prova comunque a leggerla, PHP registra un warning simile a questo:
PHP Warning: Undefined array key "email" in /percorso/file.php on line 123
Il warning può comparire dopo un aggiornamento a PHP 8 perché alcune condizioni che in passato producevano messaggi meno evidenti vengono segnalate in modo più chiaro. La pagina può continuare a funzionare, ma il codice sta facendo un’ipotesi non valida sui dati ricevuti.
Le cause comuni sono un campo di modulo assente, un’opzione non inizializzata, una risposta API diversa dal previsto, un hook che riceve una struttura differente o codice non compatibile con la versione corrente di PHP o WordPress.
Individuare il componente responsabile
Leggi il percorso indicato nel messaggio. Una directory sotto wp-content/plugins/ identifica normalmente un plugin; wp-content/themes/ indica un tema; un file di uno snippet personalizzato richiede la revisione del codice aggiunto al sito. La riga segnala dove PHP ha tentato l’accesso, ma la causa può essere un dato mancante generato qualche istruzione prima.
Annota anche la chiave tra virgolette e l’azione che precede il warning: salvataggio di un modulo, checkout, chiamata cron, importazione, richiesta AJAX o apertura di una pagina specifica. Se l’errore compare soltanto con un determinato input, confronta un caso che funziona con quello che fallisce.
Eseguire una diagnosi sicura
- Crea un backup o usa una copia di staging prima di modificare file PHP.
- Aggiorna WordPress, plugin e tema coinvolti, dopo averne verificato la compatibilità.
- Riproduci una sola volta l’azione e registra messaggio completo, data, ora, file e riga.
- Se il log non è sufficiente, abilita temporaneamente
WP_DEBUGeWP_DEBUG_LOG, mantenendoWP_DEBUG_DISPLAYdisattivato sul sito pubblico. - Controlla
wp-content/debug.loge il log PHP dell’account, quindi disattiva il debug al termine. - Se possibile, prova il componente in staging con gli stessi dati e con la stessa versione PHP del dominio.
Non condividere pubblicamente il log completo: può contenere percorsi del server, dati delle richieste o altre informazioni riservate.

Correggere il codice
Se il codice è tuo, valida il dato prima di leggerlo e definisci un comportamento per il caso in cui manchi. Per una chiave che non deve accettare null puoi usare isset():
$email = isset($dati['email']) ? $dati['email'] : '';
La forma più compatta, quando è appropriata, è l’operatore di coalescenza nulla:
$email = $dati['email'] ?? '';
Usa array_key_exists() quando devi distinguere una chiave assente da una chiave presente con valore null. isset(), invece, restituisce falso in entrambi i casi. Prima di accedere a una struttura annidata, verifica anche che il valore contenitore sia davvero un array.
Il valore predefinito deve avere senso per l’applicazione. Inserire sempre una stringa vuota può soltanto spostare il problema: per un dato obbligatorio è spesso più corretto interrompere l’operazione con un messaggio chiaro.
Se l’errore proviene da un plugin o tema
Non modificare direttamente i file di un plugin o di un tema distribuito da terzi: l’aggiornamento successivo cancellerebbe la correzione. Verifica prima se esiste una versione aggiornata. Se il problema resta, raccogli un caso riproducibile e invialo allo sviluppatore del componente.
Per confermare il responsabile puoi disattivare temporaneamente il componente in staging. Sul sito pubblico esegui questa prova soltanto se conosci l’impatto e disponi di un modo per ripristinarlo. Se il warning è iniziato dopo il cambio di versione PHP, non lasciare una versione obsoleta come soluzione permanente: usa l’eventuale rollback soltanto come test e pianifica l’aggiornamento del codice.
Cosa non fare
- Non disattivare globalmente la registrazione degli errori per far scomparire il messaggio.
- Non mostrare warning e percorsi PHP ai visitatori.
- Non sostituire alla cieca tutti gli accessi agli array con valori predefiniti.
- Non modificare file di WordPress core o componenti di terzi senza una procedura di aggiornamento.
- Non inviare nei ticket password, token, cookie o dati personali presenti nei log.
Quando contattare l’assistenza Xlogic
Apri un ticket se il warning impedisce l’accesso al sito, non riesci a individuare il log o sospetti un problema successivo a un cambio PHP sul servizio. Indica dominio, data e ora, URL interessato, azione eseguita, messaggio completo, file e riga, versione PHP e componente indicato dal percorso. Specifica anche le prove già effettuate e il relativo risultato, senza allegare credenziali.
Guide Xlogic correlate
- PHP Warning “Trying to access array offset on bool” in WordPress
- WordPress: errore “Undefined constant”
- WordPress: errore “Class not found”
Domande frequenti
Il warning Undefined array key blocca sempre WordPress?
No. Un warning può lasciare visibile la pagina, ma segnala che il codice ha letto un dato assente. Va comunque corretto perché può riempire i log o anticipare un errore in un altro punto.
Perché il messaggio è comparso dopo il passaggio a PHP 8?
PHP 8 segnala più chiaramente alcuni accessi a chiavi inesistenti. Il cambio può rendere visibile un difetto già presente in un plugin, tema o snippet non pienamente compatibile.
Devo usare isset() o array_key_exists()?
Usa isset() quando una chiave assente e una chiave con valore null possono essere trattate allo stesso modo. Usa array_key_exists() quando devi distinguere i due casi.
Posso nascondere il warning disattivando WP_DEBUG?
Puoi evitare che il messaggio sia mostrato ai visitatori, ma disattivare la visualizzazione non corregge la causa. Registra temporaneamente l’errore nel log, individua il componente e applica una correzione verificata.