En este tutorial te enseño paso a paso cómo crear una web Headless usando WordPress como CMS y Next.js como frontend moderno.
¿Quieres construir sitios ultra rápidos combinando la facilidad de WordPress con la potencia de frameworks modernos?
En este tutorial aprenderás a crear un sistema Headless usando WordPress como backend y Next.js como frontend.
Veremos paso a paso cómo configurar WordPress, crear un proyecto en Next.js, consumir la API REST de WordPress y renderizar posts en una aplicación moderna y totalmente desacoplada.
WordPress es un CMS (Content Management System), es decir, una plataforma que permite a cualquier usuario crear, editar y administrar contenido. Tradicionalmente, WordPress combina:
En un enfoque Headless, se separa completamente el backend del frontend. WordPress sigue administrando contenido, pero el renderizado lo hace Next.js consultando la API de WordPress.
Esto permite:
El tutorial recomienda usar Docker o Laradock para levantar WordPress fácilmente.
En tu terminal ejecuta:
npx create-next-app@latest tutorial-headless
Luego:
cd tutorial-headless
npm run dev
En la raíz del proyecto, crea .env.local:
NEXT_PUBLIC_WORDPRESS_API=https://tusitio.com/wp-json/wp/v2
El prefijo NEXT_PUBLIC_ permite usar la variable tanto en el servidor como en el cliente.
Crea la carpeta lib/ y dentro un archivo wordpress.js:
const API_URL = process.env.NEXT_PUBLIC_WORDPRESS_API || "";
// fetch genérico
export async function fetchFromWP(endpoint) {
const response = await fetch(API_URL + endpoint);
if (!response.ok) {
console.error("Error:", response.statusText);
throw new Error("Error al consultar WordPress");
}
return response.json();
}
// obtener posts
export async function getPosts() {
return fetchFromWP("/posts");
}
// obtener post por slug
export async function getPostBySlug(slug) {
const posts = await fetchFromWP(`/posts?slug=${slug}`);
return posts.length ? posts[0] : null;
}
Modifica app/page.js:
import Link from "next/link";
import { getPosts } from "@/lib/wordpress";
export default async function Home() {
const posts = await getPosts();
return (
{posts.map((post) => (
{post.title.rendered}
))}
);
}
Crea:
app/posts/[slug]/page.js
Y agrega lo siguiente:
import { getPostBySlug } from "@/lib/wordpress";
export default async function PostPage({ params }) {
const post = await getPostBySlug(params.slug);
if (!post) {
return Post no encontrado
;
}
return (
{post.title.rendered}
);
}
Código completo: 👉 tutorial-headless
Combinar WordPress con Next.js en un entorno Headless te permite crear sitios rápidos, seguros y con total libertad tecnológica.
Este tutorial es una base perfecta para proyectos modernos como blogs, landings, sitios corporativos o e-commerce headless.
¡Espero que te sirva para tus próximos desarrollos!