Como activar y usar el modo depuración en un servidor con wordpress para el desarrollo de plugins o themes

debug wordpress

Introducción

Durante las tareas de desarrollo de plugins o themes para wordpress es necesario realizar constantes pruebas de funcionamiento de nuestro codigo y dado que en el servidor no disponemos de una consola, como la que tenemos en los navegadores, que nos permitan monitorizar los errores o visualizar el contenido de las correspondiente variables, es necesario disponer de algún mecanismo de depuración de codigo en nuestro servidor de wordpress para monitorizar los posibles errores y comprobar el correcto funcionamiento del codigo.

Activar modo depuración en wordpress

Para activar el modo de depuración en nuestro servidor con wordpress hemos de acceder a fichero «wp-config.php» que se encuentra en el directorio raiza de nuestra instalación y cambiar o añadir diferentes constantes que utiliza wordpress para tal proposito.

Una vez tenemos acceso al fichero «wp-config.php» hemos de buscar la linea que contiene la siguiente sentencia:

define('WP_DEBUG',false);

Una vez hemos encotrado la sentencia, debemos cambiar el valor de «false» por «true» quedando del siguiente modo:

define('WP_DEBUG',true);

Con ello tendremos el modo depuración de wordpress activado, y wordpress enviara junto con la respuesta a cada petición del servidor los posibles errores que puedan surgir durante la ejecución haciendo que se muestren dichos errores en las vistas del navegador de nuestros proyectos.

Activar registro de errores en el servidor

Con este mecanismo ya disponemos de bastante información para llevar a cabo nuestra tarea de depuración de codigo, pero que pasa si en un punto de ejecución del codigo aborta la ejecución y no se llega a renderizar nada en el navegador, o queremos monitorizar el valor de determinadas variables, o mostrar un error personalizado que se genera por el fallo de la lógica del plugin o theme.

Para ello podemos usar la función de wordpress «error_log()» que almacena el contenido de su argumento en un fichero que crea en el directorio «wp-content» y que se llama «debug.log». P

Pero antes de poder usar la función «error_log()», hemos de activar esta opción en wordpress y para ello recurrimos de nuevo al fichero «wp-config.php». A continuación de la linea donde activamos el modo depuración añadimos la siguiente linea:

define('WP_DEBUG_LOG',true);

Con ello habremo activado la posibilidad de usar la función error_log() que es tremendamente útil a la hora de monitorizar el codigo de nuestro plugin o theme.

Registrar errores personalizados

Por ejemplo si queremos saber si una función se ejecuta o no podemos incluir una linea con «error_log()» en el interior de nuestra función, en el siguiente codigo se puede ver el ejemplo:

/**
 * Enqueue scripts and styles.
 */
function gsmtc_scripts() {

	wp_enqueue_style( 'gsmtc-style', get_stylesheet_uri(), array(), _S_VERSION );

	wp_enqueue_script( 'gsmtc-navigation', get_template_directory_uri() . '/js/bootstrap.bundle.min.js', array(), _S_VERSION, true );

}
add_action( 'wp_enqueue_scripts', 'gsmtc_scripts' );

Tenemos la función tipica de cargado de estilos y scripts y , por el motivo que sea, queremos saber si se ejecuta, para ello podemos añadir una linea con el «error_log()», quedando el codigo anterior de la siguiente manera:

/**
 * Enqueue scripts and styles.
 */
function gsmtc_scripts() {
        
        error_log('La funcion "gsmtc_scripts" se ha ejecutado');

	wp_enqueue_style( 'gsmtc-style', get_stylesheet_uri(), array(), _S_VERSION );

	wp_enqueue_script( 'gsmtc-navigation', get_template_directory_uri() . '/js/bootstrap.bundle.min.js', array(), _S_VERSION, true );

}
add_action( 'wp_enqueue_scripts', 'gsmtc_scripts' );

En caso de que la función «gsmtc_scripts» se ejecute además de realizar todas las tareas para las que esta programada, añadiria una nueva linea al fichero debug.log, que se encuentra en el directorio «wp-content», con la cadena introducida como parametro de la función, ‘La función «gsmtc_script» se ha ejecutado’.

Registrar contenido de variables de nuestro código

Para poder visualizar el contenido de una variable podemos utilizar la función var_export() junto con la función error_log().

La función var_export es una función nativa de php utiliza dos parametros la variable en cuestión a mostrar y un booleano que determina si se devueve el contenido de la variable como una cadena o si se realiza un «echo()» con el contenido de la variable y por lo tanto solo se muestra en el renderizado de la web. En nuestro caso queremos que nos devuelva una cadena para que sea incluida con la función «error_log()» en el fichero «debug.log».

El uso combinado de ambas funciones podria ser como sigue:

error_log(var_export($variable,true));

de este modo se mostraria el contenido de «$variable» en el fichero debug.log, en caso de querer que se muestre en la web , deberiamos cambiar a «false» el valor del segundo parametro, es un uso poco recomendable en estos casos, pero posible.

Depuración en entornos de producción

Todo lo que hemos visto hasta ahora es muy útil para un entorno de desarrollo, pero que pasa si tenemos que detectar un error en un entorno en producción, no es conveniente que se muestren en la web los posibles errores, pero si que necesitamos que se registen en el fichero «debug.log()».

Para ello podemos añadir la siguiente linea al fichero «wp-config.php»:

define('WP_DEBUG_DISPLAY',false);

esta linea oculta los mensajes de error que se muestran en la web, pero sigue registrando los errores en el fichero «debug.log», lo cual nos resulta muy util para depurar una web en producción con la minima interferencia posible en su funcionamiento.

Cuando finalizes la depuración, sobre todo si es un entorno de producción deber desactivar todo lo que has activado, debes devolver la constante WP_DEBUG a false y puedes comentar el resto de declaraciones, o borrarlas quedando de la siguiente forma:

define('WP_DEBUG',false);
//define('WP_DEBUG_LOG',true);
//define('WP_DEBUG_DISPLAY',false);