Como depurar con WP_DEBUG y WP_DEBUG_LOG en PHP en WordPress

Introducción

Depurar WordPress correctamente es esencial para desarrollar plugins y temas robustos. WordPress ofrece constantes integradas como WP_DEBUG y WP_DEBUG_LOG que, combinadas con la configuración de PHP, permiten capturar errores, avisos y mensajes personalizados en un archivo de registro seguro. Este artículo detalla cómo usar esas herramientas, ejemplos prácticos, buenas prácticas, y soluciones a errores frecuentes.

Contents

Conceptos clave

  • WP_DEBUG: activa el modo de depuración de WordPress. Cuando es true, WordPress mostrará advertencias y errores generados por PHP y por el propio núcleo.
  • WP_DEBUG_LOG: si está activado, registra los errores en un archivo (por defecto wp-content/debug.log).
  • WP_DEBUG_DISPLAY: controla si los errores se muestran en pantalla. En desarrollo suele estar a true, en producción debe ser false.
  • SCRIPT_DEBUG: fuerza el uso de versiones no comprimidas de scripts y estilos del núcleo, útil al depurar problemas de JS/CSS.
  • SAVEQUERIES: guarda en memoria las consultas SQL realizadas, permite analizar rendimiento (consume memoria).

Cómo habilitar la depuración en wp-config.php

La forma recomendada es editar el archivo raíz wp-config.php antes de la línea que dice / Thats all, stop editing! Happy publishing. /. Un bloque de configuración de ejemplo para un entorno de desarrollo:


Explicación rápida

  • Con WP_DEBUG = true WordPress emitirá avisos, que ayudan a detectar funciones obsoletas y errores.
  • Con WP_DEBUG_LOG = true los mensajes van a wp-content/debug.log. Si el archivo no existe, WordPress intentará crearlo.
  • Con WP_DEBUG_DISPLAY = false se evita exponer errores a los visitantes los mensajes sólo estarán en el log.

Ubicación y permisos del archivo de log

Por defecto WordPress escribe en wp-content/debug.log. Si el archivo no se crea, verifica:

  • Permisos del directorio wp-content (por ejemplo 755 para directorios, 644 para archivos).
  • Propiedad del proceso web (el usuario que ejecuta PHP) debe poder escribir en wp-content o en el archivo debug.log.
  • Si tu hosting bloquea la creación de archivos, usa logs del servidor web (error_log) o una ruta personalizada.

Forzar ruta personalizada al log

Si necesitas una ruta distinta o más control, puedes establecer la constante WP_DEBUG_LOG con una ruta absoluta (WordPress 5.8 ). Ejemplo:


Ejemplos prácticos de mensajes de depuración

Además de los errores automáticos, puedes registrar mensajes desde tu código.

 123, nombre => Prueba )
if ( defined( WP_DEBUG )  WP_DEBUG ) {
    error_log( [MiPlugin] Datos:  . print_r( datos, true ) )
}

// Registrar excepciones
try {
    // código que puede lanzar excepción
} catch ( Exception e ) {
    if ( defined( WP_DEBUG )  WP_DEBUG ) {
        error_log( [MiPlugin] Excepción:  . e->getMessage() )
    }
}

Usar trigger_error para distintos niveles

PHP soporta distintos niveles de error. Puedes usar trigger_error para generar avisos/notices o warnings que WordPress registrará.


Configuración adicional de PHP

Para asegurarte de que PHP reporte todo lo necesario, modifica la configuración mediante error_reporting e ini_set:


Depuración de consultas SQL

Si activas SAVEQUERIES, WordPress guarda un array global wpdb->queries con cada consulta, su tiempo y pila de llamadas. Útil para detectar consultas lentas.

queries, function ( a, b ) {
        return b[1] <=> a[1]
    } )
    for ( i = 0 i < min( 10, count( wpdb->queries ) ) i   ) {
        error_log( [SQL]  . print_r( wpdb->queries[ i ], true ) )
    }
}

Buenas prácticas y seguridad

  1. No dejar WP_DEBUG activo en producción. Exponer avisos puede revelar rutas, nombres de funciones y otra información sensible.
  2. Usar WP_DEBUG_DISPLAY = false en entornos accesibles públicamente y revisar logs en lugar de mostrar errores en pantalla.
  3. Rotación de logs: controlar el tamaño de los archivos de log (logrotate en servidores Linux o escribir logs diarios con nombres únicos).
  4. Eliminar datos sensibles de logs: evita registrar contraseñas, tokens o datos de tarjetas.
  5. Control de permisos: asegurar que solo el usuario administrador o el proceso web tengan acceso al archivo de logs.

Integración con herramientas avanzadas

  • Xdebug: para inspección paso a paso, breakpoints y perfiles. Recomendado en desarrollo local.
  • Monolog: si necesitas capacidades avanzadas (niveles de logs, handlers remotos, rotación), puedes integrar Monolog en tu plugin o tema y enviar logs a servicios externos.
  • WP-CLI: puedes revisar logs desde línea de comandos y automatizar tareas de diagnóstico.

Ejemplo: uso simple de Monolog

pushHandler( new StreamHandler( WP_CONTENT_DIR . /logs/mi_plugin.log, Logger::DEBUG ) )

log->info( Inicio proceso, array( step => 1 ) )

Problemas frecuentes y soluciones

  • El debug.log no se crea: comprobar permisos del directorio, propietario del proceso PHP y si WP_DEBUG_LOG está configurado correctamente. También verificar que no hay open_basedir que impida escribir en la ruta.
  • No aparecen errores en el log: asegurarse de que error_reporting y log_errors están habilitados y de que WP_DEBUG está activo. Algunos errores críticos pueden registrarse en el log del servidor en vez de en debug.log.
  • Errores duplicados o imprecisos: limpiar logs antes de pruebas y usar mensajes identificables (prefijos) por plugin/tema para localizar el origen.
  • Fugas de memoria al imprimir grandes objetos: usar print_r con segundo parámetro true y limitar la profundidad, o serializar grandes estructuras con precaución.

Checklist rápido para depurar correctamente

  1. Editar wp-config.php y activar WP_DEBUG y WP_DEBUG_LOG.
  2. Setear WP_DEBUG_DISPLAY = false en entornos no locales.
  3. Comprobar permisos de wp-content y existencia de debug.log.
  4. Usar error_log / trigger_error en puntos estratégicos del código.
  5. Revisar y rotar logs periódicamente.
  6. Desactivar debug y limpiar logs antes de pasar a producción.

Recursos

Notas finales

El uso correcto de WP_DEBUG y WP_DEBUG_LOG acelera la detección de problemas y mejora la calidad del código. Combínalos con herramientas como Xdebug para depuración avanzada y asegúrate siempre de no dejar información sensible accesible en entornos públicos.



Acepto donaciones de BAT's mediante el navegador Brave 🙂



Deja una respuesta

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