Seleccionar página

Activar el modo DEBUG para mostrar y depurar errores en WordPress

por | Jul 20, 2017 | Wordpress

Índice de contenidos

Cómo ver y depurar los errores en WordPress

Como desarrolladores de aplicaciones, tenemos claro que una de las fases o funciones de nuestro trabajo, consiste en depurar errores de programación. Cuando trabajamos en  WordPress y un plugin o tema producen un error podemos activar el modo DEBUG. Con el modo DEBUG activado, veremos los errores en WordPress y depuraremos el código. Ya verás que sencillo es.

Activar el modo DEBUG en WordPress

WordPress cuenta con un «sistema propio de depuración de errores PHP». Este sistema está pensado para simplificar el proceso de depuración y estandarizar el código de plugins, temas y core de WordPress.

Normalmente como programadores necesitamos activar el modo DEBUG en algunos momentos:

  1. fase de desarrollo de nuestro propio código.
  2. actualizaciones, instalaciones o eliminación de plugins, temas, versiones de WordPress..
  3. cuando observamos lentitud en nuestra web.
  4. salidas inesperadas de consultas a la base de datos…

Vamos a ello:

Primero abriremos el archivo wp-config.php que se encuentra en la raíz de tu instalación WP. Vamos a trabajar con este archivo. Modificaremos y añadiremos algunas constantes para activar el modo DEBUG. De esta forma ya podemos acceder a los errores y trabajar en un entorno de depuración.

Activar el modo DEBUG

WP_DEBUG es una constante PHP que permite activar o desactivar el modo de depuración de WordPress. El valor por defecto de esta constante que se encuentra definida en el archivo wp-config.php es «false». 

Este valor inicial «false» define el comportamiento por defecto de WordPress. De esta forma sólo muestra en pantalla errores graves, fatales, y/o muestra una pantalla en blanco. 

Para activar el modo DEBUG y hacer un seguimiento de los errores, abrimos el archivo wp-config y buscamos la constante WP_DEBUG:

define('WP_DEBUG', false);

modificamos false asignando el valor: true

define('WP_DEBUG', true);

¿Qué es lo que hemos conseguido? al activar la variable se mostrarán todos los errores graves y leves, avisos de funciones obsoletas, noticias de PHP… esto nos permite depurar el código y modificar funciones. Pero OJO sólo debemos trabajar así en la fase de desarrollo, cuando la web todavía no es pública.

PROBLEMA: Cuando activamos el modo DEBUG los errores y avisos se muestran en pantalla dentro del HTML. Esto significa que son visibles para todos los usuarios que visiten nuestra web. Pueden provocar alerta en los usuarios y romper el sitio.

SOLUCIÓN: para solucionar este problema lo mejor es recoger todos los errores y avisos en un archivo tipo log. Este archivo se guarda dentro de una carpeta de nuestro sitio y podemos acceder a él para ver y solucionar nuestros errores de programación.

Registrar los errores PHP en un archivo LOG

Volvemos al archivo wp-config y vamos a añadir nuevo código debajo de WP_DEBUG. 

Primero: añadir constante WP_DEBUG_LOG

define('WP_DEBUG_LOG', true);

WP_DEBUG_LOG se encargada de volcar todos los errores dentro de un fichero. Este fichero se llama debug.log y lo encontrarás dentro de la carpeta wp_content/debug.log.

Esta constante es complementaria de WP_DEBUG y para que funcione correctamente WP_DEBUG debe permanecer activada (true).

Ahora ya tienes almacenados todos los errores de la web en un único archivo y podrás acceder al mismo para ver y depurar los errores PHP de WordPress. Pero CUIDADO los errores se siguen mostrando en pantalla.

Segundo: añadir constante WP_DEBUG_DISPLAY y init_set

Vamos a añadir código al archivo para evitar que muestre los errores en pantalla y no interrumpir la carga de página:

define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors',0);

WP_DEBUG_DISPLAY muestra (true) o oculta (false) los errores en pantalla.

Por último para mejorar el funcionamiento podemos establecemos con init_set la directiva display_errors a false. 

Código completo de depuración en wp-config

// Activar modo WP_DEBUG para mostrar errores
define('WP_DEBUG', true);

// Volcar los errores en el archivo /wp-content/debug.log
define('WP_DEBUG_LOG', true);

// No mostrar errores y avisos en pantalla y seguir la carga de pagina
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors',0); / * Idealmente, esto debería establecerse en php.ini, si tiene acceso * 

Es aconsejable que al terminar de depurar errores PHP comentes esta parte de código. También te recomiendo eliminar el archivo debug.log. Como se vuelca todo en este archivo se crean miles de líneas que al cabo del tiempo son difíciles de seguir. Así que lo mejor que puedes hacer es: comentar el código y eliminar el archivo debug. La próxima vez que necesites mostrar y depurar errores en WordPress lo único que tienes que hacer es quitar los comentarios.

Mostrar y depurar errores de archivos js y css de WordPress

Cuando modificamos archivos JavaScript o CSS integrados en WP y necesitamos depurar errores podemos usar la constante: SCRIPT_DEBUG

define('SCRIPT_DEBUG', true);

Definiendo SCRIPT_DEBUG a true obligamos a WordPress a cargar las versiones extendidas de estos archivos. Normalmente WordPress carga versiones simplificadas o mínimas de estos archivos en un entorno de producción.

Mostrar y depurar errores de la Base de Datos

Otra opción interesante es el seguimiento de las consultas SQL de la base de datos. Si añadimos a nuestro archivo de configuración la constante:

define('SAVEQUERIES', true);

Conseguiremos almacenar todas las consultas en un array. Además de los datos, el array también guarda el tiempo de ejecución y la función que provocó la consulta. 

*Para que funcione SAVEQUERIES, WP_DEBUG debe estar activada.

El array se almacena en una variable global: $wpdb->queries

Ahora que tenemos salvados los datos, vamos a recorrer el array y analizar el contenido. Para este propósito usaremos la función PHP: print_r($wpdb->queries)

En el footer de nuestra tema añadimos el siguiente script PHP:

<? php
if (current_user_can ('administrator')) {
    global $ wpdb;
    echo "<pre>";
    print_r ($ wpdb-> consultas);
    echo "</ pre>";
}
?>

IMPORTANTE: SAVEQUERIES afecta negativamente al rendimiento del sitio. Cuando termines de depurar las consultas modifica el valor true a false.

Función depuración código propio

Cuando creamos script de código propios o desarrollamos un plugins y temas, a menudo necesitamos hacer un seguimiento del código. PHP cuenta con varias funciones para el manejo de errores. Si añades la siguiente función en el archivo que quieres depurar:

error_log($mensaje-error, 3, "/var/tmp/errors.log");

Todos los errores se registraran en un archivo llamado errors.log. Para depurar los errores puedes abrir el archivo desde tu editor de código preferido.

PROBLEMA: ahora tienes dos archivos de depuración que manejar.

SOLUCIÓN: volcar todos los errores en el archivo debug.log.

Vamos a trabajar con el archivo functions, alojado en wp-content/themes/tu-tema/functions.php (mejor si trabajas con un tema hijo). Dentro del archivo añadiremos una función, creada por Stu Miller desarrollador de WordPress.

Abre el archivo functions.php y copia pega el siguiente código:

if (!function_exists('write_log')) {
    function write_log ( $log )  {
        if ( true === WP_DEBUG ) {
            if ( is_array( $log ) || is_object( $log ) ) {
                error_log( print_r( $log, true ) );
            } else {
                error_log( $log );
            }
        }
    }
}

A partir de ahora cuando necesites hacer un seguimiento de tu código, debes llamar a la función write_log con  

write_log('COMIENZA DEPURACION DE CODIGO PROPIO');
write_log($lo_que_quieras_registrar);

Explicación del código

Función write_log

Si la función write_log no existe, crea la función. Comprueba si el modo DEBUG está a true (activado). Si se da esta condición, se comprueba si el parámetro que pasamos a la función ($lo_que_quieras_registrar) es una array o un objeto. En caso de array u objeto se emplea para la salida de errores print_r (necesaria para recorrer este tipo de variables). Si no es array ni object simplemente se escribe el resultado en el archivo.

Observamos que se emplea la función PHP de registro de errores: error_Log, encargada de enviar los mensajes de error.

En caso contrario, WP_DEBUG false, la función termina.  

Llamada a la función

La primera línea de código sirve para escribir en el archivo debug.log la frase: «COMIENZA DEPURACION DE CODIGO PROPIO». Es útil para encontrar el error dentro del archivo debug. Luego llamamos a la función enviando lo que queremos depurar.


Ya hemos terminado. Ha sido fácil verdad? Con estas indicaciones podrás revisar todo el código de WordPress y propio para depurar los errores. Recuerda al finalizar comentar el archivo config.php con todas las constantes modificadas. 

WordPress ofrece un conjunto amplio de constantes muy útiles para un desarrollo avanzado. Si quieres conocer hasta donde puede llevarte el desarrollo de WordPress trabajando con constantes puedes leer el siguiente artículo de mi blog: Constantes de WordPress

Y si lo tuyo son los plugins encontrarás varios en el repositorio de WordPress: Plugins de depuración WordPress

 

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *