Sopprimere gli avvisi di deprecazione
Quando uso:
define('WP_DEBUG', 1);
Nel mio wp-config.php
, funziona bene, ma sto modificando un vecchio tema e vorrei sopprimere gli avvisi di deprecazione.
La mia comprensione è che aggiungendo questo:
error_reporting( E_ERROR | E_NOTICE | E_PARSE )
Dovrebbe funzionare. L'ho aggiunto sia a wp-config.php
che a header.php
nel mio tema. Sfortunatamente, non ha alcun effetto. È qualcosa impostato a livello server? Anche il seguente codice non fa alcuna differenza:
ini_set('display_errors', 1);
Come richiesto nei commenti qui sotto, ecco alcuni degli avvisi. Sto utilizzando una versione modificata del tema Construct 2, ormai abbastanza vecchio ma non sarebbe sicuro aggiornarlo. Sto cercando di convincere il cliente a farmi riscriverlo, il sito è abbastanza semplice, ma poiché non riesce a vedere nulla di sbagliato, non è rotto, non vuole spendere i soldi.
Deprecated: L'assegnazione del valore di ritorno di new per riferimento è deprecata in
/Volumes/Macintosh HD/Sites/MAMP (custodian)/wordpress/wp-content/themes/construct2/option-tree/ot-loader.php
alla riga 369Strict Standards: La dichiarazione di
DropDown_Nav_Menu::start_lvl()
dovrebbe essere compatibile conWalker_Nav_Menu::start_lvl(&$output, $depth = 0, $args = Array)
in/Volumes/Macintosh HD/Sites/MAMP (custodian)/wordpress/wp-content/themes/construct2/dropdown-menus.php
alla riga 192
Sono riuscito a sopprimere i notice nel log e gli errori visualizzati utilizzando la funzione error_reporting in un plugin must-use, che viene caricato abbastanza presto da catturare la maggior parte degli avvisi del codice core di WordPress. Questo è utile per gli avvisi provenienti da file core/plugin che non dovresti modificare.
Ho creato un file php nella cartella /wp-content/mu-plugins/ con questo codice:
<?php
error_reporting(E_ALL & ~E_WARNING & ~E_DEPRECATED & ~E_USER_DEPRECATED & ~E_NOTICE);
?>

Grazie mille! Ho creato un plugin WordPress per controllare il plugin MU direttamente dal pannello di amministrazione.

Come mmm ha affermato:
in quale file appare il primo avviso?
Dovunque l'avviso menzioni la posizione di questa funzione deprecata (percorso/di/un/file.php
), dovresti inserire quanto segue appena sotto il tag <?php
che inizia il file:
error_reporting(0);
Ho provato le funzioni sopra menzionate e le ho inserite nel mio wp-config.php
quando ho sperimentato qualcosa di simile, ma non hanno funzionato per me. Questo disattiverà gli avvisi, i deprecati e tutto il resto tranne gli errori.

Interessante (cioè dimostra la superficialità della mia comprensione), inserire error_reporting(0);
(o qualsiasi altra variazione) nel primo dei file menzionati nella lunga lista di messaggi di errore sopprime tutti i messaggi dai file successivi diversi ma non l'avviso di deprecazione in quel file

@ChrisPink Non capisco del tutto il tuo ultimo commento, potresti chiarire per favore?

Scusa, non mi sono spiegato molto bene. Inserire error_reporting(0)
nel file ot-loader.php (come per il messaggio nell'OP) ha soppresso tutti gli avvisi successivi ma non quello originato da ot-loader.php (quello nell'OP). Quindi immagino di dover inserire la funzione error_reporting() nel file che chiama ot-loader.php.

Questo è probabilmente il modo più "WordPress" per farlo.
Il codice DEVE essere inserito nel tuo file wp-config, dopo le definizioni di WP_DEBUG (e qualsiasi altra) perché questo particolare filtro viene eseguito prima del caricamento di qualsiasi plugin.
$GLOBALS['wp_filter'] = array(
'enable_wp_debug_mode_checks' => array(
10 => array(
array(
'accepted_args' => 0,
'function' => function () {
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
// *** Questa è la riga chiave - modifica per adattarla allo stato di logging che desideri
error_reporting( E_ALL & ~E_DEPRECATED );
ini_set( 'display_errors', defined( 'WP_DEBUG_DISPLAY' ) && WP_DEBUG_DISPLAY ? 1 : 0 );
if ( in_array( strtolower( (string) WP_DEBUG_LOG ), array( 'true', '1' ), true ) ) {
$log_path = WP_CONTENT_DIR . '/debug.log';
} elseif ( is_string( WP_DEBUG_LOG ) ) {
$log_path = WP_DEBUG_LOG;
} else {
$log_path = false;
}
if ( $log_path ) {
ini_set( 'log_errors', 1 );
ini_set( 'error_log', $log_path );
}
if (
defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || defined( 'MS_FILES_REQUEST' ) ||
( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) ||
wp_doing_ajax() || wp_is_json_request() ) {
ini_set( 'display_errors', 0 );
}
}
return false;
},
),
),
));

Perché prima del caricamento di qualsiasi plugin? I warning di deprecazione provengono dal tema.

Sembra che molti plugin modifichino anche questo valore, quindi ho avuto buoni risultati con questi due approcci:
// Tentativo di essere l'ultimo a impostare questo valore
add_action('wp_loaded', function() { error_reporting( E_ALL & ~E_NOTICE );
});
// Ancora più tardi, ma non troppo tardi
add_action('wp', function() { error_reporting( E_ALL & ~E_NOTICE );
});

Con il seguente codice puoi semplicemente rimuovere i messaggi deprecati da qualsiasi sia l'attuale impostazione di segnalazione degli errori. Aggiungendolo al file functions.php del tuo tema nasconderà tutti gli errori di deprecazione.
error_reporting(error_reporting() & ~E_DEPRECATED);

Puoi farlo in questo modo, così potrai ancora effettuare il debug quando necessario:
Esempio (inseriscilo nel file functions.php del tema):
add_action('wp_loaded', function() {
if(WP_DEBUG==false){
// forza la disabilitazione della segnalazione degli errori
error_reporting(0);
}else {
if(WP_DEBUG==true){
// forza le tue regole personalizzate
error_reporting(E_ALL & ~E_WARNING & ~E_DEPRECATED & ~E_USER_DEPRECATED & ~E_NOTICE);
}
}
});
