Suprimir avisos de obsolescencia

16 sept 2016, 13:22:39
Vistas: 21.4K
Votos: 15

Cuando uso:

define('WP_DEBUG', 1);

En mi wp-config.php, funciona bien, pero estoy modificando un tema antiguo y me gustaría suprimir los avisos de funciones obsoletas.

Según entiendo, agregando esto:

error_reporting( E_ERROR | E_NOTICE | E_PARSE )

Debería funcionar. Lo he agregado tanto a wp-config.php como a header.php en mi tema. Desafortunadamente, no tiene efecto. ¿Es algo que se configura a nivel del servidor? Además, lo siguiente tampoco hace diferencia:

ini_set('display_errors', 1);

Como se pidió en los comentarios a continuación, aquí hay algunos de los avisos. Estoy usando una versión modificada del tema Construct 2, bastante antiguo ahora, pero no sería seguro actualizarlo. Estoy tratando de convencer al cliente para que me deje reescribirlo, el sitio es bastante simple, pero como él no puede ver nada mal, no está roto, no quiere gastar el dinero.

Obsoleto: Asignar el valor de retorno de new por referencia está obsoleto en /Volumes/Macintosh HD/Sites/MAMP (custodian)/wordpress/wp-content/themes/construct2/option-tree/ot-loader.php en la línea 369

Estándares Estrictos: La declaración de DropDown_Nav_Menu::start_lvl() debe ser compatible con Walker_Nav_Menu::start_lvl(&$output, $depth = 0, $args = Array) en /Volumes/Macintosh HD/Sites/MAMP (custodian)/wordpress/wp-content/themes/construct2/dropdown-menus.php en la línea 192

4
Comentarios

¿en qué archivo aparece el primer aviso?

mmm mmm
16 sept 2016 13:31:48

¿Puedes mostrar el aviso de depreciación que estás recibiendo? Esto me ayudará a darte una mejor respuesta

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

Mira arriba, lo agregué al post original

Chris Pink Chris Pink
18 sept 2016 12:55:55

@ChrisPink Según mi experiencia al trabajar con una instalación antigua de WordPress, colocaría el código que proporcioné en mi respuesta tanto en el archivo ot-loader.php como en el dropdown-menus.php.

Ethan Rævan Ethan Rævan
18 sept 2016 17:37:23
Todas las respuestas a la pregunta 6
2
17

Pude suprimir los avisos en el registro y los errores mostrados utilizando la función error_reporting en un plugin must-use, que se carga lo suficientemente temprano como para capturar la mayoría de las advertencias del código central de WordPress. Esto es útil para las advertencias que provienen de archivos del núcleo o plugins que no deberías modificar.

Creé un archivo php en la carpeta /wp-content/mu-plugins/ con este código:

<?php 
error_reporting(E_ALL & ~E_WARNING & ~E_DEPRECATED & ~E_USER_DEPRECATED & ~E_NOTICE);
?>
11 nov 2021 21:01:12
Comentarios

¡Gracias, esto funcionó para mí!

Azamat Azamat
10 feb 2022 01:21:28

¡Muchas gracias! He creado un plugin de WordPress para controlar el plugin MU desde la comodidad del panel de administración.

volkerschulz volkerschulz
30 oct 2023 11:16:45
4

Como mmm mencionó:

¿en qué archivo aparece el primer aviso?

Donde sea que el aviso mencione la ubicación de esta función obsoleta (ruta/al/archivo.php), debes insertar lo siguiente justo debajo de la etiqueta <?php que inicia el archivo:

error_reporting(0);

He probado las funciones anteriores que mencionaste y las inserté en mi wp-config.php cuando experimenté algo similar, pero no funcionaron para mí. Esto desactivará las advertencias, obsoletos y todo lo demás excepto los errores.

16 sept 2016 17:14:58
Comentarios

Interesante (es decir, muestra la superficialidad de mi entendimiento), insertar error_reporting(0); (o cualquier otra variación) en el primero de los archivos mencionados en la larga lista de mensajes de error suprime todos los mensajes de los archivos posteriores diferentes, pero no el aviso obsoleto en ese archivo

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

@ChrisPink No entiendo del todo tu último comentario, ¿podrías aclararlo por favor?

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

Lo siento, no me expliqué muy bien. Insertar error_reporting(0) en el archivo ot-loader.php (según el mensaje en el OP) suprimió todos los avisos posteriores pero no el originado en ot-loader.php (el del OP). Así que supongo que necesito insertar la función error_reporting() en el archivo que llama a ot-loader.php.

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

@ChrisPink Sí, inserta ese código en ot-loader.php.

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

Esta es probablemente la forma más "WordPress" de hacerlo.

El código DEBE ir en tu archivo wp-config, después de las definiciones de WP_DEBUG (y cualquier otra) porque este filtro particular se ejecuta antes de que se carguen los plugins.

$GLOBALS['wp_filter'] = array(
'enable_wp_debug_mode_checks' => array(
    10 => array(
        array(
            'accepted_args' => 0,
            'function'      => function () {
                if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
                    // *** Esta es la línea clave - cambia para ajustar al estado de registro que desees
                    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 ene 2023 18:26:28
Comentarios

¿Por qué antes de que se carguen los plugins? Las advertencias de obsoleto provienen del tema.

Rup Rup
3 feb 2023 14:46:28

Esto me dio el error " Fatal error: Call to undefined function wp_is_json_request() in /var/www/html/wp-config.php on line 111", comentar esa parte de la verificación funcionó (nota que esto es en una instalación antigua de WordPress)

Ferrybig Ferrybig
24 mar 2023 10:27:43
0

parece que muchos plugins también modifican este valor, así que he tenido buena suerte con estos dos enfoques:

// intentando ser el último en establecer este valor
add_action('wp_loaded', function() { error_reporting( E_ALL & ~E_NOTICE ); 
});

// incluso más tarde, pero no demasiado tarde
add_action('wp', function() { error_reporting( E_ALL & ~E_NOTICE ); 
});

20 oct 2023 19:05:15
1

Con lo siguiente puedes eliminar los mensajes obsoletos de cualquier configuración actual de reporte de errores. Al agregarlo al archivo functions.php de tu tema, ocultarás todos los errores de funciones obsoletas.

error_reporting(error_reporting() & ~E_DEPRECATED);
30 nov 2023 14:10:39
Comentarios

¡Gracias! De todos los enfoques sugeridos desde 2016, este funcionó de inmediato

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

Puedes hacerlo de esta manera, para que aún puedas depurar cuando sea necesario:

Ejemplo (colócalo en functions.php del tema):

add_action('wp_loaded', function() { 
    if(WP_DEBUG==false){
        // forzar desactivación de reporte de errores
        error_reporting(0);
    }else {
        if(WP_DEBUG==true){
            // forzar tus propias reglas
            error_reporting(E_ALL & ~E_WARNING & ~E_DEPRECATED & ~E_USER_DEPRECATED & ~E_NOTICE);
        }
    }
});
26 ene 2025 04:39:11