Suprimir avisos de obsolescencia
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 369Estándares Estrictos: La declaración de
DropDown_Nav_Menu::start_lvl()
debe ser compatible conWalker_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

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);
?>

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

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.

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

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

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.

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;
},
),
),
));

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

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 );
});

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);

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);
}
}
});
