WordPress

Solucionar TypeError Cannot Read Properties of Undefined en Gutenberg

Ordenador portátil mostrando código de programación y un error en el navegador web.

El error TypeError: Cannot read properties of undefined (reading 'undo') es una incidencia crítica que bloquea la interfaz del editor de bloques de WordPress (Gutenberg). Este mensaje, visible en la consola de desarrollo del navegador, indica que el motor de JavaScript del editor intenta acceder a un método de control de historial (el objeto 'undo') que, en ese momento de la ejecución, no existe o no ha sido inicializado. Esto ocurre porque el objeto global encargado de gestionar la pila de cambios ha sido sobrescrito, bloqueado o no se ha cargado debido a un conflicto de dependencias. A continuación, desarrollamos una guía técnica exhaustiva para diagnosticar y solucionar este problema de forma definitiva.

Qué significa el error y por qué se bloquea el editor

Cuando este error aparece, la interfaz de Gutenberg se congela o muestra el mensaje "El editor ha encontrado un error inesperado". Técnicamente, el editor de bloques utiliza una arquitectura basada en estados (Redux o Data Stores internos). La función 'undo' es parte del sistema de gestión de historial del editor. Si un plugin de terceros, un tema mal programado o una optimización agresiva de scripts interfiere en la carga de los archivos wp-blocks, wp-editor o wp-data, el objeto que contiene la función 'undo' queda como undefined. Al intentar llamar a undefined.undo(), el motor de JavaScript detiene la ejecución del script, dejando el editor inutilizable.

Causas técnicas habituales

  • Conflictos de carga de scripts: Plugins que intentan cargar versiones antiguas de librerías React o dependencias de WordPress que colisionan con las nativas.
  • Optimización excesiva (Minificación/Concatenación): Al combinar todos los archivos JS en uno solo, el orden de carga se altera. Gutenberg requiere que sus dependencias se carguen en una secuencia específica; si esta se rompe, el objeto 'undo' no se registra a tiempo.
  • Incompatibilidad de plugins de bloques: Extensiones que añaden bloques personalizados y que utilizan funciones de la API de WordPress obsoletas o que no han sido actualizadas para la versión actual de Gutenberg.
  • Caché de servidor y navegador: Archivos JS antiguos almacenados en caché que intentan llamar a funciones que ya han cambiado en el núcleo de WordPress.

Antes de empezar: Protocolo de seguridad

Atención: Antes de manipular la configuración de plugins o archivos del núcleo, es imperativo realizar una copia de seguridad completa. Si el error impide el acceso al panel de administración, necesitarás acceso vía FTP o al Administrador de Archivos de tu panel de control (cPanel/Plesk). Localiza la carpeta /wp-content/plugins/ y renombra temporalmente la carpeta del plugin sospechoso para desactivarlo forzosamente. Esto te permitirá recuperar el acceso al panel de control.

Solución 1: Desactivar el plugin Gutenberg independiente

Muchos usuarios instalan el plugin "Gutenberg" desde el repositorio para probar funciones nuevas. Sin embargo, desde hace varias versiones de WordPress, este plugin es redundante y a menudo conflictivo con el editor integrado en el núcleo.

  1. Accede al panel de administración de WordPress.
  2. Navega a Plugins > Plugins instalados.
  3. Localiza el plugin con nombre Gutenberg.
  4. Haz clic en Desactivar.
  5. Paso crítico: Tras desactivarlo, limpia la caché de tu navegador y recarga la página de edición.

Por qué funciona: WordPress ya incluye la última versión estable del editor. Al tener el plugin activo, estás ejecutando dos instancias de la lógica del editor simultáneamente. La versión del plugin intenta "tomar el control" sobre la versión del núcleo, creando el conflicto de referencias al objeto 'undo'.

Solución 2: Desactivar la optimización de JavaScript (Minificación y Concatenación)

Plugins como Autoptimize, WP Rocket, LiteSpeed Cache o Hummingbird suelen incluir opciones para "Combinar archivos JS" o "Minificar JavaScript". Estas funciones son la causa número uno de errores de undefined en Gutenberg.

  1. Entra en los ajustes de tu plugin de caché.
  2. Busca la sección de Optimización de JavaScript o File Optimization.
  3. Desactiva la opción Combinar archivos JS (o Aggregate JS).
  4. Desactiva la opción Minificar JavaScript temporalmente para descartar que el proceso de minificación esté eliminando variables necesarias.
  5. Si utilizas WP Rocket, ve a la pestaña Archivo y asegúrate de que la opción "Retrasar la ejecución de JavaScript" no esté afectando a los scripts de WordPress (puedes añadir /wp-includes/js/ a la lista de exclusión).
  6. Guarda los cambios y, muy importante, pulsa el botón "Limpiar caché" o "Purgar todo".

Por qué funciona: WordPress carga sus scripts mediante un sistema de dependencias (script handles). Cuando combinas archivos, el orden de carga se vuelve impredecible. Si el script que define el historial del editor se carga después de un script que intenta usarlo, el objeto será undefined.

Solución 3: Actualización y depuración de plugins de bloques

Si el error ocurre solo al usar ciertos bloques (por ejemplo, bloques de tablas, carruseles o botones personalizados), el problema reside en el plugin que añade esos bloques.

  1. Identifica si el error aparece en todas las páginas o solo en aquellas que usan un bloque específico.
  2. Ve a Plugins > Plugins instalados y actualiza todo lo que tenga una versión pendiente.
  3. Si el problema persiste, realiza una prueba de aislamiento: desactiva todos los plugins de bloques (como Kadence, GenerateBlocks, Ultimate Addons) y reactívalos uno a uno.
  4. Tras activar cada uno, intenta editar una página. Si el error vuelve, has encontrado el plugin causante.
  5. Contacta con el soporte del desarrollador del plugin indicando que su script está fallando en la inicialización de la API de bloques de WordPress.

Solución 4: Limpieza profunda de caché y conflictos de navegador

A veces, el problema no está en el servidor, sino en una versión corrupta del archivo JS guardada en el caché de tu navegador.

  1. Abre la consola de desarrollador (F12) en tu navegador.
  2. Ve a la pestaña Application (en Chrome/Edge) o Almacenamiento (en Firefox).
  3. En el menú lateral, selecciona Storage > Local Storage y Session Storage. Haz clic derecho y selecciona Clear (Limpiar).
  4. Recarga la página forzosamente: mantén pulsada la tecla Shift mientras haces clic en el botón de recargar del navegador.
  5. Si esto no funciona, verifica si el error persiste en modo incógnito. Si en modo incógnito funciona, el problema es una extensión de tu navegador (como bloqueadores de anuncios o gestores de scripts) que está interfiriendo con el editor de WordPress.

Solución 5: Reinstalar los archivos del núcleo de WordPress (Solución avanzada)

Si nada de lo anterior ha funcionado, es posible que un archivo del núcleo de WordPress (específicamente los archivos JS de la carpeta wp-includes/js/dist/) se haya corrompido durante una actualización automática.

  1. Descarga la última versión de WordPress desde WordPress.org.
  2. Descomprime el archivo en tu ordenador.
  3. A través de FTP, sube las carpetas wp-admin y wp-includes a tu servidor, sobrescribiendo las existentes. No subas la carpeta wp-content ni el archivo wp-config.php para no perder tus datos ni configuraciones.
  4. Esta acción reemplaza cualquier archivo del núcleo que pudiera estar dañado sin afectar a tu base de datos ni a tus temas/plugins.

Cómo verificar que el problema se ha resuelto

Para confirmar que la solución es definitiva, sigue estos pasos:

  1. Abre la consola de desarrollador (F12) antes de cargar el editor.
  2. Carga una página o entrada en el editor de bloques.
  3. Observa la pestaña Console. No debe aparecer ningún texto en rojo.
  4. Añade un bloque de párrafo, escribe algo, y pulsa Ctrl + Z (o el botón de deshacer).
  5. Si el texto desaparece y vuelve sin que aparezca el mensaje "TypeError: Cannot read properties of undefined (reading 'undo')", la funcionalidad de historial ha sido restaurada correctamente.
  6. Finalmente, guarda la entrada como borrador para asegurar que la comunicación con la API REST de WordPress funciona correctamente.

Preguntas frecuentes

¿Puedo perder mis textos si aparece este error?

Generalmente, no. WordPress utiliza una función llamada autosave que se guarda en el almacenamiento local de tu navegador. Si el editor se bloquea, no recargues la página inmediatamente. Intenta copiar el contenido manualmente (si es posible) o espera a que el navegador recupere la conexión. Una vez resuelto el error, WordPress detectará el guardado automático y te ofrecerá recuperar la versión anterior.

¿Afecta este fallo a la parte pública de mi web?

En absoluto. Este error es un fallo de ejecución en el panel de administración (back-end). Los visitantes de tu sitio web verán la página renderizada correctamente, ya que el error de JavaScript solo ocurre en el entorno de edición. Tu sitio sigue siendo funcional para el usuario final.

¿Es necesario tener conocimientos de programación para solucionarlo?

No. Aunque el error menciona código (JavaScript), las soluciones se basan en la gestión de plugins y ajustes de caché. No necesitas modificar código fuente, solo desactivar componentes o ajustar configuraciones desde el panel de administración.

¿Por qué ocurre este error tras actualizar WordPress?

Las actualizaciones de WordPress a menudo incluyen versiones más nuevas de las librerías de React y Gutenberg. Si un plugin antiguo no se ha actualizado para ser compatible con estas nuevas librerías, intentará llamar a funciones que han cambiado de nombre o ubicación, provocando el error de "propiedad indefinida".

¿Qué debo hacer si el error persiste tras probar todo?

Si has llegado hasta aquí y el error sigue presente, es posible que exista un conflicto a nivel de servidor (por ejemplo, una versión de PHP incompatible o un firewall de aplicaciones web como ModSecurity bloqueando peticiones AJAX). En este caso, recomendamos contactar con el soporte técnico de tu hosting, facilitándoles el mensaje de error exacto de la consola para que puedan revisar los registros del servidor (error_log) y descartar bloqueos de seguridad.