Sopprimere gli avvisi di deprecazione

16 set 2016, 13:22:39
Visualizzazioni: 21.4K
Voti: 15

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 369

Strict Standards: La dichiarazione di DropDown_Nav_Menu::start_lvl() dovrebbe essere compatibile con Walker_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

4
Commenti

in quale file appare il primo avviso?

mmm mmm
16 set 2016 13:31:48

Puoi mostrare l'avviso di deprecazione che stai ricevendo? Questo mi aiuterà a darti una risposta migliore

Ethan Rævan Ethan Rævan
16 set 2016 17:04:56

Vedi sopra aggiunto al post originale

Chris Pink Chris Pink
18 set 2016 12:55:55

@ChrisPink Dalla mia esperienza lavorando con un'installazione WordPress più vecchia, inserirei il codice che ho fornito nella mia risposta sia nel file ot-loader.php che nel file dropdown-menus.php.

Ethan Rævan Ethan Rævan
18 set 2016 17:37:23
Tutte le risposte alla domanda 6
2
17

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);
?>
11 nov 2021 21:01:12
Commenti

Grazie, ha funzionato per me!

Azamat Azamat
10 feb 2022 01:21:28

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

volkerschulz volkerschulz
30 ott 2023 11:16:45
4

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.

16 set 2016 17:14:58
Commenti

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

Chris Pink Chris Pink
18 set 2016 13:04:25

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

Ethan Rævan Ethan Rævan
18 set 2016 17:33:38

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.

Chris Pink Chris Pink
20 set 2016 10:35:32

@ChrisPink Sì, inserisci quel codice in ot-loader.php.

Ethan Rævan Ethan Rævan
20 set 2016 20:50:50
2

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;
            },
        ),
    ),
));
27 gen 2023 18:26:28
Commenti

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

Rup Rup
3 feb 2023 14:46:28

Questo mi ha dato l'errore " Fatal error: Call to undefined function wp_is_json_request() in /var/www/html/wp-config.php on line 111", commentando quella parte del controllo ha funzionato (nota che si tratta di un'installazione WordPress vecchia)

Ferrybig Ferrybig
24 mar 2023 10:27:43
0

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 ); 
});
20 ott 2023 19:05:15
1

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);
30 nov 2023 14:10:39
Commenti

Grazie! Tra tutti gli approcci suggeriti dal 2016, questo ha funzionato subito senza problemi

Eric Hepperle - CodeSlayer2010 Eric Hepperle - CodeSlayer2010
1 mag 2024 23:05:35
0

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);
        }
    }
});
26 gen 2025 04:39:11