Headless CMS(无头内容管理系统)是近年来非常流行的架构模式。它将内容管理(后端)和内容展示(前端)完全分离。WordPress 作为内容管理端,通过 REST API 或 GraphQL 提供数据,而前端则使用 Next.js、Nuxt、Gatsby 等现代框架构建。这种模式带来了更好的性能、更高的安全性和更灵活的开发体验。

什么是 Headless WordPress? 在传统 WordPress 架构中,PHP 在服务器端渲染 HTML 直接输出给浏览器。而在 Headless 架构中,WordPress 只负责管理内容和提供 API 接口,前端完全由 JavaScript 框架接管,通过 AJAX 或服务端渲染(SSR)获取数据并生成页面。

为什么选择 Headless? 主要优势包括:

  • 性能提升:前端可以部署在 CDN 边缘节点,响应速度极快

  • 安全性增强:WordPress 后台与前端分离,攻击面大幅减少

  • 开发灵活性:前端团队和后端团队可以独立工作,使用各自擅长的技术栈

  • 多端复用:同一套 API 可以同时为 Web、移动 App、小程序、智能设备提供服务

  • 更好的开发者体验:现代前端框架的开发工具链远超 WordPress 主题开发

搭建 Headless WordPress 的基本步骤

第一步,安装 WordPress 并配置 REST API。WordPress 默认提供了 REST API,但你可能需要安装 WPGraphQL 插件来获得 GraphQL 接口,或者安装 Custom Endpoints 插件来定制 API 响应结构。

第二步,选择前端框架。Next.js(React)和 Nuxt(Vue)是目前最流行的选择,它们都支持服务端渲染(SSR)和静态站点生成(SSG),对 SEO 非常友好。

第三步,构建前端应用,从 WordPress API 获取数据。以 Next.js 为例,在 getStaticProps 或 getServerSideProps 中调用 WordPress API:

// pages/index.js
export async function getStaticProps() {
  const res = await fetch('https://你的网站.com/wp-json/wp/v2/posts?_embed');
  const posts = await res.json();
  return {
    props: { posts },
    revalidate: 60, // 增量静态再生成
  };
}

export default function Home({ posts }) {
  return (
    <div>
      {posts.map(post => (
        <article key={post.id}>
          <h1 dangerouslySetInnerHTML={{ __html: post.title.rendered }} />
          <div dangerouslySetInnerHTML={{ __html: post.excerpt.rendered }} />
        </article>
      ))}
    </div>
  );
}

处理 SEO 是 Headless 架构中的重点。Next.js 的 next/head 组件可以动态设置页面标题和 Meta 标签。你可以从 WordPress 的自定义字段或 Yoast SEO 插件的 API 中获取 SEO 数据:

import Head from 'next/head';

export default function Post({ post, seo }) {
  return (
    <>
      <Head>
        <title>{seo.title}</title>
        <meta name="description" content={seo.description} />
        <meta property="og:title" content={seo.og_title} />
      </Head>
      <article dangerouslySetInnerHTML={{ __html: post.content.rendered }} />
    </>
  );
}

静态站点生成 vs 服务端渲染 是 Headless 架构中的关键选择。对于内容不经常变化的网站,推荐使用 SSG(静态站点生成),在构建时生成所有页面,部署到 CDN 后访问速度极快。对于内容频繁更新的网站,可以使用 ISR(增量静态再生成),在用户访问时触发重新生成。对于需要实时数据的页面,使用 SSR(服务端渲染)。

增量静态再生成(ISR) 是 Next.js 的一个强大功能。在 getStaticProps 中设置 revalidate 参数,页面会在后台重新生成,用户始终看到的是最新内容,同时保持了静态页面的速度。

缓存策略 在 Headless 架构中也需要重新设计。页面的缓存可以在 CDN 层面(如 Vercel、Netlify 的自动缓存),也可以在 WordPress 端用 Redis 缓存 API 响应,减少数据库查询。

注意事项

  • Headless 架构中,WordPress 的预览功能需要额外处理,通常通过 Next.js 的 Preview Mode 实现

  • 表单提交、搜索功能需要前端自己实现,不能依赖 WordPress 的默认行为

  • 多语言支持需要前端配合处理,WordPress 的 Polylang 等插件仍然可以管理多语言内容,前端需要读取语言参数

Headless WordPress 将 WordPress 的能力从“建站工具”提升为“内容基础设施”。虽然前期投入比传统主题开发要大,但对于大型项目、多端应用和追求极致性能的网站,Headless 架构是非常值得的长期投资。