WordPress introdujo Gutenberg para modernizar la edición de contenido con bloques, y para muchos sitios web cumple bien su función. Pero si estás construyendo un creador de páginas personalizado, un editor SaaS o una herramienta visual con control total de HTML/CSS, Gutenberg a menudo se convierte en una limitación más que en una solución.
Aquí es donde entra en escena GrapesJS .
En este artículo, compararemos GrapesJS con Gutenberg, explicaremos cuándo cada uno tiene sentido y luego recorreremos un enfoque realista y listo para la producción para construir un constructor de páginas personalizado en WordPress usando GrapesJS.
Esta guía está escrita para:
- Desarrolladores y agencias de WordPress
- Ingenieros frontend
- Constructores SaaS que crean editores de páginas, documentos o correo electrónico
Sin relleno. Sin publicidad publicitaria. Solo arquitectura práctica y decisiones reales.
Gutenberg vs GrapesJS — La diferencia central
Antes de comparar características, es importante entender que Gutenberg y GrapesJS resuelven problemas diferentes.
Gutenberg en una sola frase
Gutenberg es un editor de contenido basado en bloques estrechamente conectado a WordPress.
GrapesJS en una frase
GrapesJS es un editor visual de HTML/CSS independiente del framework que puede usar WordPress únicamente como backend.
Esta diferencia moldea todo lo demás.
Comparación rápida: GrapesJS vs Gutenberg

Cuando Gutenberg es la elección correcta
Gutenberg funciona bien cuando:
- Estás construyendo sitios web con mucho contenido
- Los editores son usuarios no técnicos
- Quieres una integración profunda con el núcleo de WordPress
- La flexibilidad de la disposición es secundaria frente a la consistencia
Si estás creando un blog, un sitio de marketing o un portal de noticias — Gutenberg suele ser suficiente.
Cuando GrapesJS es la mejor opción
GrapesJS se convierte en la mejor opción cuando:
- Necesitas control total de HTML y CSS
- Estás creando un creador de páginas personalizado
- Quieres exportar contenido fuera de WordPress
- Estás construyendo un editor estilo SaaS
- Quieres diseñar documentos, correos electrónicos, propuestas, páginas de destino
En otras palabras: si WordPress es tu backend, no tu editor, GrapesJS encaja perfectamente.
Arquitectura del mundo real: WordPress + GrapesJS
Veamos un montaje listo para producción, no una demo.
Arquitectura de alto nivel
WordPress Admin ↓ Página de editor personalizado ↓ GrapesJS (iframe) ↓ API REST ↓ Base de datos / Biblioteca multimedia
Reparto de responsabilidades
- WordPress
- Autenticación y permisos
- Almacenamiento (HTML, CSS, JSON)
- Subidas de medios
- REST API
- GrapesJS
- Edición visual
- Componentes y disposición
- Estilos
- Exportación de HTML/CSS
Esta separación mantiene tu sistema limpio y escalable.
Paso 1: Incrustar GrapesJS en el administrador de WordPress
Crea una página de administración personalizada o un editor de tipos de publicaciones personalizado.
Enqueuear scripts de forma segura
add_action('admin_enqueue_scripts', función () {
wp_enqueue_script(
'grapesjs',
'https://unpkg.com/grapesjs',
[],
null,
true );
wp_enqueue_style(
'grapesjs-css',
'https://unpkg.com/grapesjs/dist/css/grapes.min.css' );
wp_enqueue_script(
'mi-editor',
plugin_dir_url(__FILE__) . 'editor.js',
['grapesjs'],
'1.0',
verdadero );
wp_localize_script('my-editor', 'WP_EDITOR', [
'nonce' => wp_create_nonce('wp_rest'),
'api' => rest_url('custom/v1'),
]);
});
Por qué importa iframe
GrapesJS renderiza contenido dentro de un iframe:
- Previene conflictos de CSS de administrador de WordPress
- Mantiene aislados los estilos frontend
- Hace que la salida sea predecible
Esto es una característica, no una desventaja.
Paso 2: Inicialización de GrapesJS
En editor.js:
editor const = grapesjs.init({
contenedor: '#editor',
altura: '100vh',
fromElement: false,
storageManager: false,
canvas: {
styles: [
'/wp-content/themes/your-theme/style.css'
]
}
});
Desactiva el gestor de almacenamiento predeterminado — nosotros nos encargaremos de guardar manualmente.
Paso 3: Guardar contenido correctamente
¿Qué deberías guardar?
Recomendado:
- HTML → salida final
- CSS → estilos
- projectData → GrapesJS JSON (para reedición)
Endpoint de la API REST (PHP)
register_rest_route('custom/v1', '/save', [
'métodos' => 'POST',
'permission_callback' => función () {
return current_user_can('edit_posts');
},
'callback' => función ($request) {
$post_id = intval($request['post_id']);
update_post_meta($post_id, '_gjs_html', $request['html']);
update_post_meta($post_id, '_gjs_css', $request['css']);
update_post_meta($post_id, '_gjs_project', wp_json_encode($request['proyecto']));
return ['éxito' => verdadero];
}
]);
Botón de guardar (JS)
función async savePage() {
await fetch('${WP_EDITOR.api}/save', {
método: 'POST',
cabeceras: {
'Content-Type': 'application/json',
'X-WP-Nonce': WP_EDITOR.nonce
},
cuerpo: JSON.stringify({
post_id: 123,
html: editor.getHtml(),
css: editor.getCss(),
proyecto: editor.getProjectData()
})
});
}
Paso 4: Volver a cargar contenido en el editor
editor.loadProjectData(projectJson);
Esto permite una edición auténtica de ida y vuelta, con la que Gutenberg tiene dificultades para maquetaciones complejas.
Paso 5: Integración con la biblioteca multimedia de WordPress
Usa el selector de medios nativo:
const frame = wp.media({
título: 'Seleccionar imagen',
múltiple: false
});
frame.on('select', () => {
const file = frame.state().get('selection').first().toJSON();
editor. AssetManager.add({
src: file.url,
type: 'image'
});
});
frame.open();
Ahora las imágenes subidas en WordPress aparecen directamente en GrapesJS.
Seguridad y permisos
Nunca te saltes esto.
Lista de comprobación:
- ✅ REST nonces
- ✅ current_user_can() jaques
- ✅ Desinfecta en el renderizado, no en la partida guardada
- ✅ Restringir el acceso al editor por rol
Importante:
Si los usuarios exportan HTML, no desinfecten en exceso el contenido almacenado — desinfecten solo cuando se renderice públicamente.
Mejores prácticas de rendimiento
- Carga perezosamente GrapesJS solo cuando se abre el editor
- Inyectar solo requería CSS en el lienzo
- Evita reiniciar el editor
- Usa una instancia de editor por página
- Ocultar activos de forma agresiva
Trampas comunes
❌ "Mis estilos no sirven"
Olvidaste cargar CSS en el iframe (canvas.styles).
❌ "El editor es lento"
Demasiados plugins o el guardado automático activados.
❌ "El contenido se interrumpe al recargar"
Solo guardas HTML, no JSON del proyecto.
Decisión final: GrapesJS o Gutenberg?
Elige Gutenberg si:
- Estás construyendo sitios WordPress con contenido en primer lugar
- Quieres WP UX nativo
Elige GrapesJS si:
- Estás creando un creador de páginas personalizado
- Necesitas control total de HTML/CSS
- WordPress es tu backend, no tu editor
- Estás construyendo un editor SaaS o avanzado
Reflexiones finales
Gutenberg es un gran editor de contenidos.
GrapesJS es un framework constructor.
Si tu objetivo es crear algo más parecido a Webflow, Elementor, Notion o un editor de documentos, GrapesJS junto con WordPress es una base potente y flexible.
WordPress gestiona lo que mejor sabe hacer: usuarios, permisos, almacenamiento.
GrapesJS se encarga de lo que mejor hace: edición visual y maquetación.
Esa separación es clave para constructores profesionales y escalables.
