El ecosistema de desarrollo web vive un momento peculiar: millones de sitios siguen funcionando sobre WordPress, mientras cada vez más equipos apuestan por frameworks estáticos o híbridos como Astro para ganar rendimiento, seguridad y flexibilidad. En medio de ese escenario aparece DeWP, un proyecto todavía en fase temprana que aspira a ser precisamente eso: un puente limpio entre el veterano CMS y el nuevo mundo de los sitios headless.
DeWP no es “otro tema” ni “otro plugin” para WordPress. Es un conjunto de cargadores de contenido y utilidades para Astro que permite usar directamente los datos del WordPress de siempre —a través de su REST API— como si fueran colecciones nativas de contenido en Astro.
El objetivo es doble:
El propio autor lo avisa desde el principio: DeWP es “early release” y requiere Astro v5 (actualmente en beta). Es decir, está pensado para desarrolladores que no tienen miedo de probar herramientas nuevas y convivir con algún bug puntual.
A cambio, ofrece algo muy atractivo para cualquiera que mantenga un WordPress con años de contenido: aprovechar todo ese histórico sin rehacerlo todo a mano, y servirlo con la rapidez y flexibilidad de un sitio Astro.
El núcleo del proyecto está en dewp/loaders. Estos cargadores utilizan la REST API de WordPress para traer el contenido y exponerlo mediante la API de colecciones de contenido de Astro.
Basta con un pequeño ajuste en src/content/config.ts:
import { wpCollections } from 'dewp/loaders';
export const collections = wpCollections({
endpoint: 'https://example.com/wp-json/',
});
Lenguaje del código: JavaScript (javascript)
A partir de ahí, el contenido de WordPress pasa a estar disponible como colecciones Astro estándar. DeWP define, entre otras, las siguientes:
posts – Entradas del blog (wp/v2/posts).pages – Páginas estáticas jerárquicas (wp/v2/pages).categories y tags – Taxonomías clásicas.users – Autores y usuarios.comments – Comentarios de posts.media – Imágenes y adjuntos.statuses, taxonomies, types – Metadatos de estados, taxonomías y tipos de contenido.site-settings – Ajustes básicos del sitio (título, descripción, icono, zona horaria, etc.).La idea es que cada tipo de dato de la API REST tenga su reflejo directo en una colección Astro, respetando el esquema original de WordPress.
Uno de los detalles más interesantes es cómo DeWP maneja las referencias entre entidades.
En la API REST de WordPress, un post trae, por ejemplo, un array de IDs de categorías ([1, 3, 5]). En DeWP, esos enlaces se convierten en referencias de colección, algo del estilo:
categories: [{ id: '1', collection: 'categories' }]
Lenguaje del código: CSS (css)
Esto permite usar directamente las utilidades de Astro (getEntry, getEntries) para resolver relaciones sin tener que pelearse con IDs crudos ni hacer llamadas adicionales al backend:
const post = await getEntry('posts', '1');
const categories = await getEntries(post.data.categories);
Lenguaje del código: JavaScript (javascript)
Para el desarrollador, esto se traduce en menos pegamento manual y más productividad.
Quien quiera probar DeWP desde cero puede apoyarse en el blog starter que ofrece el proyecto. El flujo es muy simple:
npm create astro -- --template delucis/dewp/examples/blog-startersrc/content/config.ts para apuntar al endpoint REST del WordPress real: export const collections = wpCollections({ endpoint: 'https://tu-sitio.com/wp-json/', });/blog muestra los 10 posts más recientes.Es una forma rápida de validar si el enfoque encaja con el proyecto sin tener que montar toda la estructura a mano.
Si el proyecto Astro ya está en marcha y se quiere incorporar contenido de WordPress, el camino también es directo:
import { z, defineCollection } from 'astro:content';
import { wpCollections } from 'dewp/loaders';
export const collections = {
// colecciones existentes...
...wpCollections({ endpoint: 'https://example.com/wp-json/' }),
};
Lenguaje del código: JavaScript (javascript)
Desde ese momento, se pueden usar las colecciones igual que cualquier otra de Astro. Un ejemplo mínimo para listar títulos de posts sería:
---
import { getCollection } from 'astro:content';
const posts = await getCollection('posts');
---
{posts.map((post) => <p>{post.data.title.rendered}</p>)}
Lenguaje del código: JavaScript (javascript)
Además de los cargadores, DeWP incluye utilidades de contenido en dewp/content-utils que resuelven casos frecuentes.
getSiteSettings() devuelve la entrada de la colección site-settings, con datos clave como:
name – título del sitio,description – descripción corta,url y home,site_icon_url y site_logo,timezone_string, gmt_offset).Es ideal para alimentar la configuración global de un proyecto Astro: <head>, metadatos, componentes de layout, etc.
En WordPress, una página hija hereda el slug de su padre en la URL (/big-cats/lion). DeWP replica este comportamiento con la función resolvePageSlug(page), que reconstruye la ruta completa teniendo en cuenta la jerarquía de páginas:
const slug = await resolvePageSlug(page); // "big-cats/lion"
Lenguaje del código: JavaScript (javascript)
Esto permite generar rutas estáticas en Astro que coincidan con la estructura original del sitio WordPress, algo crucial si se migran URLs ya posicionadas en buscadores.
En los últimos años se ha instalado una narrativa simplista: o se está en el “mundo WordPress” o se da el salto a frameworks modernos y se abandona todo lo anterior. DeWP propone un camino intermedio mucho más pragmático:
Para medios, blogs tecnológicos, webs corporativas con mucho histórico o proyectos que necesitan combinar SEO fuerte con rendimiento extremo, este tipo de solución híbrida puede ser especialmente interesante.
DeWP no es todavía una solución “enterprise” ni un estándar consolidado. Es una pieza joven que:
Pero su propuesta encaja muy bien con la realidad de muchos proyectos: no todo el mundo puede permitirse tirar su WordPress y empezar desde cero, y al mismo tiempo cada vez más equipos quieren beneficiarse de la arquitectura moderna, el rendimiento y la DX que ofrecen frameworks como Astro.
Para quienes viven en ese punto medio, DeWP es una invitación clara:
probar cómo sería seguir usando WordPress… pero con un frontend del siglo XXI.
