在构建一个动态博客网站时,通常需要从内容源获取数据,比如像WordPress这样的内容管理系统(CMS)。
最近,我面临了一个挑战,即将WordPress集成到我的现有Next.js项目中。我在WordPress上托管了一个博客,并希望将其迁移到我的Next.js应用程序中。
我需要一个解决方案,允许我将WordPress作为无头CMS使用。目标很简单:利用WordPress的强大功能来管理内容,同时利用现代前端框架来展示内容。
在这篇文章中,我们将介绍如何将WordPress集成到Next.js应用程序中。
为什么使用无头CMS?
无头CMS将内容管理(后端)与呈现层(前端)分离。这使得开发人员可以更灵活地控制内容的交付和展示方式,而不会受到传统主题或布局的限制。
它对于性能和可伸缩性来说都非常好,提供了更多控制内容在前端如何渲染的灵活性。在这种情况下,您将使用WordPress作为内容管理系统,但以一种更现代、性能更高的方式使用Next.js来展示内容。
什么是Next.js?
如果您还没有听说过Next.js,它是一个基于React的强大框架,使得构建优化、服务器端渲染(SSR)应用程序变得更容易。
它提供了一系列开箱即用的功能,如基于文件的路径路由、API路由、静态网站生成(SSG)和增量静态再生(ISR)。所有这些使得它成为创建快速、对SEO友好的网站的一个很好的选择。
如何连接WordPress和Next.js
当使用WordPress作为无头CMS时,连接Next.js应用程序到WordPress后端主要有两种方法:
-
WP REST API:WordPress自带REST API,允许您以JSON格式从WordPress获取内容。
-
WPGraphQL:通过使用GraphQL(需安装插件如WPGraphQL),WordPress支持无头内容管理,这使得查询和获取特定内容(如博客文章)以供React等前端框架使用变得简单。
尽管REST API很受欢迎,但我们将选择WPGraphQL,因为它允许进行更精确的查询和更灵活的操作。通过GraphQL,您可以请求 exactly需要的数据,这可以减少传输的数据量并提高性能。
使用WPGraphQL连接WordPress和Next.js的步骤
你需要做的第一件事是在你的WordPress网站上安装WPGraphQL插件。该插件在WordPress中启用了GraphQL API功能。你可以像安装其他插件一样,通过导航到WordPress管理仪表板来安装插件。
首先,进入插件并选择添加新的。然后,搜索WPGraphQL,一旦找到它,简单安装并激活插件。
安装并激活插件后,GraphQL IDE将出现在WordPress仪表板上。在这里,你可以测试你在前端开发中可能需要的各种查询。
让我们继续前端。
如何在Next.js中从WPGraphQL获取数据
在你的Next.js项目中,你需要从GraphQL API中获取数据。这里是一个使用graphql-request
的简单示例:
1. 安装graphql-request
以便轻松查询GraphQL API:
npm install graphql-request
2. 在你的Next.js组件中,创建一个GraphQL查询以获取博客文章:
import BlogHeader from '@/components/blog/BlogHeader';
import BlogNewsletter from '@/components/blog/BlogNewsletter';
import BlogPosts from '@/components/blog/BlogPosts';
import Link from 'next/link';
import React from 'react';
import { request, gql } from "graphql-request";
const query = gql`
{
posts(first: 10) {
edges {
node {
id
title
excerpt
content
date
author {
node {
id
name
}
}
date
slug
featuredImage {
node {
sourceUrl
}
}
categories {
edges {
node {
name
}
}
}
}
}
}
}
`
export async function getStaticProps() {
try {
const posts: any = await request('https://blog.intercity.ng/graphql', query);
return {
props: { posts }
}
} catch (error) {
console.error('Error fetching posts:', error);
return {
props: {
posts: []
}
};
}
}
const Index = ({ posts }: { posts: any }) => {
return (
<main className="relative pb-10 pt-10 lg:pt-0 lg:mt-[-3%]">
<div className='t40-container w-full'>
<BlogHeader />
<BlogPosts posts={posts} />
<BlogNewsletter />
</div>
</main>
)
}
export default Index
在上面的代码中,你的Next.js应用程序使用GraphQL从你的WordPress后端获取博客文章,并在前端显示它们。GraphQL查询被创建以检索帖子的详细信息,如标题、作者、内容和特色图片。
通过Next.js的getStaticProps
,数据在构建时被获取并作为props传递给组件。博客文章通过自定义组件如BlogHeader
、BlogPosts
和BlogNewsletter
进行渲染,使页面动态而高效。
这展示了WordPress如何被用作Next.js应用程序的无头CMS。现在你已经成功将WordPress作为无头CMS整合到你的Next.js应用程序中,你可以继续从GraphQL API获取更多数据以增强你的应用程序的功能。
结论
通过使用WordPress作为无头CMS和Next.js作为前端,我们可以在利用WordPress强大的内容管理功能的同时,构建一个快速、对SEO友好的博客。
使用WPGraphQL让我们能够高效地获取我们所需的数据,给了我们更多的控制权并提高了网站的性能。
我希望这对你有帮助。祝你编码愉快!
Source:
https://www.freecodecamp.org/news/integrate-wordpress-with-nextjs/