Si una de las ventajas mayores de utilizar WordPress como gestor de contenidos de nuestros proyectos es la gran comunidad que se encuentra detrás de este CMS, no es menos cierto que muchas veces la compatibilidad entre la gran cantidad de themes, plugins, scripts o simples soluciones que se encuentran online, no funciona directamente tal y como nos las describen.
A menudo se impone la necesidad de debuggear cuando se produce un comportamiento que no es el que esperamos. Un pantallazo blanco es el mayor de los terrores al que nos podemos enfrentar cuando estamos programando cualquier nueva funcionalidad… ¿cómo evitarlo? Os dejamos el truco más sencillo para activar todos los errores en WordPress y poder obtener la (cuantiosa) información de debug para corregir cualquier error en nuestro código.
Cómo poner WordPress en modo debug
Para asegurarte de recibir y visualizar todos los errores de los que WordPress nos puede informar, cinco son los parámetros que debes indicar, todos en el archivo wp_config.php
que encontrarás en el directorio raíz de tu instalación. Veámoslos todos de un tirón, tal y como cita el codex de WordPress:
// Enable WP_DEBUG mode
define( 'WP_DEBUG', true );
// Enable Debug logging to the /wp-content/debug.log file
define( 'WP_DEBUG_LOG', true );
// Enable display of errors and warnings
define( 'WP_DEBUG_DISPLAY', true );
@ini_set( 'display_errors', 1 );
// Use dev versions of core JS and CSS files
define( 'SCRIPT_DEBUG', true );
Como podéis imaginar, si en lugar de tener los valores en positivo, los pasamos a false
y 0
desactivaremos la publicación de dichos errores. Ahora bien, ¿qué significa cada una de las variables? ¿por qué son cinco y no una? Hay pequeñas diferencias de matices que pasamos a comentaros.
Debug en WordPress: Qué hace WP_DEBUG
WP_DEBUG
es la constante de PHP (una variable global permanente) que activa el modo de «depuración» en todo WordPress. Está previsto que sea «falso» de forma predeterminada y, por lo general, se establece a «verdadero» siempre en las versiones de desarrollo de WordPress.
Como veremos al final, no se recomienda activar WP_DEBUG
en sitios en producción; está pensado exclusivamente para pruebas locales e instalaciones provisionales.
Habilitarlo supondrá que se muestren todos los errores, avisos y advertencias de nuestro código PHP. Pero tampoco te asustes: mostrar todos los avisos y advertencias de PHP a menudo da como resultado mensajes de error para cosas que no parecen estar rotas, pero que no siguen las convenciones de validación de datos adecuadas dentro de PHP.
De la misma manera, generará avisos sobre funciones y argumentos obsoletos dentro de WordPress que se están utilizando en su sitio. Estas son funciones o argumentos que aún no se han eliminado del core, pero que se eliminarán en un futuro próximo. Los avisos de desaprobación suelen indicar también la nueva función que se debe usar en su lugar.
Qué activa WP_DEBUG_LOG
: cómo guardar los errores que genera WordPress
WP_DEBUG_LOG
es un complemento de WP_DEBUG
que hace que todos los errores también se guarden en un archivo de registro debug.log
. Esto es útil si vas a querer revisar los avisos más tarde o necesitas ver los avisos generados por consola (como si estás trabajndo con AJAX o crones de servidor).
Cuando se establece en verdadero, el registro guarda un archivo llamado debug.log
en la ruta wp-content/debug.log
, aunque esto puedes modificarlo pasándole el parámetro de la ruta a la misma constante. Alternativamente, puede configurarlo en una ruta de archivo válida para que el archivo se guarde en otro lugar. Ejemplo:
define( 'WP_DEBUG_LOG', '/tmp/wp-errors.log' );
De nuevo, ten cuidado con realizar esta práctica en producción porque wp-content/debug.log
es una ruta accesible públicamente, y por tanto, puede ser espiado por ojos curiosos y malintencionados.
Qué hace WP_DEBUG_DISPLAY
WP_DEBUG_DISPLAY
es otro complemento de WP_DEBUG
que controla si los mensajes de depuración se muestran dentro del HTML de las páginas o no. El valor predeterminado es «verdadero», y muestra los errores y las advertencias a medida que se generan. Establecer esto en falso ocultará todos los errores. Conviene usarlo junto con WP_DEBUG_LOG
para que los errores puedan revisarse más tarde.
Importante: para que WP_DEBUG_DISPLAY
realice cualquier acción, WP_DEBUG
debe estar activo.
Sigo sin ver errores en mi WordPress… ¿qué es display_errors?
En este caso, display_errors
es una directiva de PHP que, a un nivel superior, se comunica con el servidor para determinar si los errores deberían ser impresos en pantalla como parte de la salida o si deberían ocultarse al usuario. Conviene tenerlo activado en caso de que aún activando los anteriores, la pantalla no muestre los errores.
Si habilitándolo en wp_config
no diese resultado, prueba con tu archivo php.ini
. Si tampoco da resultado, posiblemente debas ponerte en contacto con tu proveedor de hosting para que lo habilite en Apache.
En el manual de PHP tienes muchas más opciones específicas para habilitar en caso de que tu problema no esté tanto en el código como en la configuración del servidor, o en las extensiones disponibles.
Errores en el front: qué hace SCRIPT_DEBUG
Por último, SCRIPT_DEBUG
es una constante de PHP que obligará a WordPress a usar las versiones de trabajo de los archivos CSS y JavaScript básicos en lugar de las versiones minimizadas o cacheadas que normalmente se cargan.
Esta última opción puede ser útil si crees que el problema viene relacionado con algún aspecto estético, de caché, llamadas AJAX… con frecuencia vemos roto algo que simplemente tenemos cacheado por una versión anterior.
Antes de salir a producción… ¡recuerda ocultar tus errores WordPress!
La misma información que puede sernos tan útil a la hora de corregir y optimizar nuestro código es oro para los hackers, y un motivo de pánico para nuestros usuarios. Imagina visualizar cualquier tipo de error PHP en mitad de un proceso de compra o pago online… la pérdida está asegurada aunque se trate de un mero warning de PHP sin relevancia real. Por ello, recuerda antes de salir a producción, restaurar los campos a sus valores originales para que la información de debug sólo pueda consultarse a través de los logs de servidor.
¡Feliz debuggeo!