WP_DEBUG non è impostato, ma continuo a ricevere avvisi
Se WP_DEBUG non è impostato, da quanto ho capito, non si dovrebbero mai vedere avvisi. Tuttavia, su alcuni siti e su alcuni server, continuo a vederne alcuni. Non tutti gli avvisi che verrebbero visualizzati se WP_DEBUG fosse attivo, ma solo alcuni specifici.
Ho provato a modificare il livello di errore nel php.ini, ma questo sembra non avere alcun effetto sulla visualizzazione degli avvisi, anche se appaiono in quantità diverse su server diversi (cioè nessun avviso in sviluppo, un avviso in staging e qualche avviso in più in produzione).
Per parafrasare wp-includes/load.php: if(WP_DEBUG)error_reporting(E_ALL). Ma sembra che diversi plugin stiano modificando error_reporting e display_errors quando probabilmente non dovrebbero farlo.

È anche possibile che questa riga sia già impostata su false. In tal caso, vedrai il seguente codice:
define('WP_DEBUG', false);
In ogni caso, devi sostituire questa riga con il seguente codice:
ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);
Non dimenticare di salvare le modifiche e caricare nuovamente il file wp-config.php sul server.

Per gli ambienti WordPress, solitamente non c'è motivo di utilizzare ini_set
perché le costanti definite dal Core di WordPress raggiungono già lo stesso obiettivo. Il funzionamento di PHP prevede che alcune impostazioni possano essere sovrascritte all'interno del tuo CMS (WordPress), in singoli script e persino su una base per utente o per directory (con grande frustrazione di hosting web e agenzie).
Per disabilitare la visualizzazione degli errori nelle pagine di WordPress, l'unica impostazione davvero necessaria è:
define('WP_DEBUG', false);
...perché quando WP_DEBUG
è disabilitato, anche le sotto-opzioni diventano inattive:
define('WP_DEBUG_DISPLAY', false);
define('WP_DEBUG_LOG', false);
Tieni presente che l'opzione confusa WP_DEBUG_LOG
si riferisce solo alla creazione di debug.log
all'interno della directory wp-content
e non influisce su altre impostazioni di log, ecc.
Ancora una volta, le impostazioni in WordPress possono sovrascrivere quelle predefinite di PHP, quindi le tue impostazioni PHP non contano tanto quanto avere le impostazioni corrette nel tuo file wp-config.php
, che viene caricato prima degli altri componenti di WP.
Detto questo, è una buona idea implementare impostazioni predefinite come le seguenti in produzione:
error_reporting = E_ERROR | E_WARNING | E_PARSE
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/www/logs/error.log
log_errors_max_len = 1024
ignore_repeated_errors = On
ignore_repeated_source = Off
report_memleaks = On
xmlrpc_errors = 0
html_errors = Off
Per un esempio completo, consulta il nostro file php.ini di SlickStack ottimizzato per Nginx e PHP-FPM.
In un caso, dopo ore di ricerca, abbiamo scoperto che un plugin (o tema) stava sovrascrivendo le varie impostazioni di gestione degli errori precedentemente impostate in php.ini
e wp-config.php
. L'unico modo per prevenire questo comportamento è rimuovere il plugin o tema WordPress che sta cercando di "hackerare" le tue impostazioni PHP, o chiedere loro di rimuoverlo perché è una pessima pratica per le estensioni sovrascrivere le opzioni di debug del tuo CMS.
In SlickStack, abbiamo creato uno script Bash che "segnala" qualsiasi riga ini_set
e error_reporting
nei file PHP delle directory /themes/
e /plugins/
, evidenziando tali istanze utilizzando un MU Plugin (script PHP) che visualizza un elenco di questi "hack" nella Dashboard di Amministrazione di WP.

Prova a disabilitare/soprimere tutti gli avvisi/notifiche di errore nel tuo file wp-config.php
(in cima). Ad ogni modo: Gli errori non sono negativi. Ti danno l'opportunità di correggere il tuo codice.

Nessuna delle soluzioni sopra indicate ha funzionato per me.
Per me, la soluzione è stata aggiungere un file php nella cartella mu-plugins. Basta creare un file php e aggiungere la seguente riga.
error_reporting(E_ALL & ~( E_NOTICE ));
Dopodiché, caricarlo nella cartella mu-plugins (se la cartella non esiste, crearla nella cartella wp-content).
