Render WordPress Gutenberg en Next.js — 1:1

localhost:3000/about Acme Acerca de Docs Tienda Contacto por NextPress Acerca de Acme Tienda familiar en Portland, Oregon – desde 2014. Nuestra historia Empezamos en un garaje. Doce años más tarde, todavía usamos todas las órdenes. El sitio que estás buscando ¿en? Editado en WordPress, servido por Siguiente.js. Los mismos bloques, el mismo tema, las mismas fuentes. No hay doble compilación. Empaquetado a mano en Portland Cada orden envía dentro de 48 horas. Cargo neutro de carbono incluido. Leer más Del diario → Cómo fuente nuestro lino → Cinco años de hembrientas → Notas del taller, Primavera 26

Full Gutenberg, No hay compromisos.

Llámalo, Haz la página.

Trae los bloques WooCommerce contigo.

  • WC Cart / Checkout / My Account bloques render contra la sesión real del usuario.
  • Token de carro compartido entre la siguiente aplicación y el bloque renderizado vía @woographql/session-utils.
  • Bloques de producto, filtros, mini-cart — mismo punto final WPGraphQL, ninguna superficie REST paralela.
  • Mutaciones de nivel de bloque (add to cart, apply coupon) ida y vuelta a través de WooGraphQL.
app/[…uri]/page.tsx
import { Content, nextImageParser } from '@axistaylor/nextpress'
import { fetchContentByUri } from '@/lib/utils'
import { NextPressLink } from '@/components/NextPressLink'

// proxyByWCR (NextPress middleware) reenvia el cart-token
// cookie a WordPress para que coincida con URIs, por lo que el renderizador WP
// lee la misma sesión que su Siguiente app.
// Mi cuenta, y bloques de producto todos render contra el usuario
// carrito real — no conEnvoltorio de Sesión requerido.
export default async function Page({
  params,
}: {
  params: Promise<{ uri?: string[] }>
}) {
  const { uri } = await params
  const path = '/' + (uri ?? []).join('/')
  const { content, contentCssClasses } = await fetchContentByUri(path)

  return (
    <Content
      content={content}
      contentCssClasses={contentCssClasses}
      instance="shop"
      linksAs={NextPressLink}
      parsers={[nextImageParser]}
    />
  )
}