Hướng dẫn kết nối Next.js với WordPress thông qua WPGraphQL
Trong kỷ nguyên số hóa hiện nay, việc xây dựng website không chỉ dừng lại ở giao diện đẹp mắt mà còn phải đảm bảo hiệu suất vượt trội, khả năng mở rộng linh hoạt và trải nghiệm người dùng tối ưu. Nếu bạn đang sử dụng WordPress làm hệ thống quản lý nội dung mạnh mẽ và muốn tận dụng sức mạnh của một frontend hiện đại như Next.js, thì việc kết nối chúng qua WPGraphQL Next.js chính là giải pháp lý tưởng. Bài viết này sẽ hướng dẫn bạn từng bước cách tích hợp Next.js với WordPress thông qua WPGraphQL, mở ra một kỷ nguyên mới cho lập trình web Next.js hiệu quả và mạnh mẽ.
Với sự kết hợp này, WordPress sẽ đóng vai trò như một Headless CMS, cung cấp nội dung qua API WordPress dựa trên GraphQL, trong khi Next.js chịu trách nhiệm hiển thị giao diện người dùng nhanh chóng và tương tác. Hãy cùng khám phá!
1. Tại sao nên kết hợp Next.js và WordPress với WPGraphQL?
Quyết định tách biệt frontend và backend (Headless CMS) mang lại nhiều lợi ích đáng kể, đặc biệt khi sử dụng Next.js cho frontend và WordPress với WPGraphQL cho backend:
- Hiệu suất vượt trội: Next.js nổi tiếng với khả năng tối ưu hiệu suất, bao gồm Server-Side Rendering (SSR) và Static Site Generation (SSG), giúp trang web tải nhanh hơn, cải thiện trải nghiệm người dùng và điểm SEO.
- Tối ưu SEO mạnh mẽ: Với SSR/SSG, nội dung được render sẵn trên server, giúp các công cụ tìm kiếm dễ dàng crawl và index trang web của bạn, dẫn đến thứ hạng cao hơn.
- Trải nghiệm phát triển hiện đại: Các nhà lập trình web Next.js được hưởng lợi từ hệ sinh thái JavaScript phong phú, khả năng cấu hình linh hoạt và hiệu suất làm việc cao.
- Khả năng mở rộng linh hoạt: Tách biệt frontend và backend cho phép bạn dễ dàng mở rộng từng phần độc lập. Bạn có thể dùng WordPress cho nhiều frontend khác nhau hoặc thay thế frontend mà không ảnh hưởng đến dữ liệu.
- Sức mạnh của GraphQL: Thay vì các REST API truyền thống, GraphQL cho phép bạn chỉ định chính xác dữ liệu mình cần, giúp giảm thiểu over-fetching hoặc under-fetching dữ liệu, tối ưu hóa các cuộc gọi API WordPress. WPGraphQL là cầu nối hoàn hảo.
2. Chuẩn bị môi trường: Cài đặt WordPress và Plugin WPGraphQL
Để bắt đầu hành trình tích hợp WPGraphQL Next.js, chúng ta cần chuẩn bị một môi trường WordPress đã cài đặt và cấu hình WPGraphQL.
2.1. Cài đặt WordPress
Đảm bảo bạn đã có một bản cài đặt WordPress hoạt động ổn định. Bạn có thể cài đặt trên localhost (như XAMPP, MAMP) hoặc trên một hosting server. Hãy ghi nhớ URL của WordPress (ví dụ: https://yourdomain.com/wordpress).
2.2. Cài đặt và kích hoạt Plugin WPGraphQL
WPGraphQL là plugin cốt lõi biến WordPress của bạn thành một GraphQL API server.
- Đăng nhập vào trang quản trị WordPress của bạn.
- Đi tới Plugins > Add New.
- Tìm kiếm “WPGraphQL” và cài đặt plugin được phát triển bởi “WPGraphQL”.
- Kích hoạt plugin.
Sau khi kích hoạt, bạn sẽ thấy một mục “GraphQL” mới trong menu quản trị WordPress. Tại đây, bạn có thể kiểm tra Playground để viết và chạy thử các query GraphQL của mình.
2.3. Cấu hình Permalinks
Để đảm bảo GraphQL endpoint hoạt động chính xác, hãy vào Settings > Permalinks trong WordPress và chọn một cấu trúc permalink ngoài “Plain” (ví dụ: “Post name”).
3. Khởi tạo dự án Next.js và cài đặt thư viện cần thiết
Bây giờ, chúng ta sẽ tạo một dự án Next.js mới và cài đặt các thư viện cần thiết để tương tác với API WordPress thông qua GraphQL.
3.1. Khởi tạo dự án Next.js
Mở terminal hoặc command prompt và chạy lệnh sau để tạo một dự án Next.js cơ bản:
npx create-next-app my-nextjs-wpgraphql-app --ts
Hoặc không dùng TypeScript:
npx create-next-app my-nextjs-wpgraphql-app
Di chuyển vào thư mục dự án:
cd my-nextjs-wpgraphql-app
3.2. Cài đặt thư viện GraphQL Client
Chúng ta sẽ sử dụng graphql-request để gửi các yêu cầu GraphQL từ Next.js. Nó nhẹ và dễ sử dụng.
npm install graphql graphql-request
Hoặc với Yarn:
yarn add graphql graphql-request
Tạo một file lib/api.js (hoặc .ts) để quản lý các hàm fetch dữ liệu GraphQL của bạn:
// lib/api.js
import { GraphQLClient, gql } from 'graphql-request';
const API_URL = process.env.WORDPRESS_API_URL; // Đặt URL của bạn trong .env.local
export async function fetchAPI(query, { variables } = {}) {
const headers = { 'Content-Type': 'application/json' };
const client = new GraphQLClient(API_URL, { headers });
try {
const data = await client.request(query, variables);
return data;
} catch (error) {
console.error('Lỗi khi fetch GraphQL:', error);
throw new Error('Không thể fetch dữ liệu từ WordPress.');
}
}
Đừng quên tạo file .env.local ở thư mục gốc của dự án Next.js và thêm:
WORDPRESS_API_URL=https://your-wordpress-domain.com/graphql
Thay thế https://your-wordpress-domain.com bằng URL WordPress của bạn.
4. Viết Query GraphQL và hiển thị dữ liệu trên Next.js
Đây là phần quan trọng nhất, nơi chúng ta sẽ truy vấn dữ liệu từ WordPress và hiển thị nó trên ứng dụng Next.js của mình.
4.1. Xây dựng Endpoint và GraphQL Query
Endpoint GraphQL của bạn thường sẽ là your-wordpress-domain.com/graphql. Bạn có thể sử dụng GraphQL Playground trong WordPress admin để thử nghiệm các query.
Ví dụ, để lấy danh sách các bài viết:
// lib/api.js (thêm vào)
export const GET_ALL_POSTS = gql`
query GetAllPosts {
posts(first: 10, where: { status: PUBLISH }) {
edges {
node {
id
title
slug
excerpt
date
author {
node {
name
}
}
}
}
}
}
`;
4.2. Fetch dữ liệu trong Next.js và hiển thị
Trong Next.js, chúng ta thường sử dụng getStaticProps (cho SSG) hoặc getServerSideProps (cho SSR) để fetch dữ liệu trước khi render component.
Ví dụ trong pages/index.js (hoặc .tsx):
// pages/index.js
import Head from 'next/head';
import { fetchAPI, GET_ALL_POSTS } from '../lib/api';
export default function Home({ posts }) {
return (
<div>
<Head>
<title>Trang chủ - Next.js với WordPress & WPGraphQL</title>
</Head>
<main>
<h1>Các bài viết mới nhất</h1>
<div>
{posts.edges.map(({ node }) => (
<article key={node.id}>
<h2><a href={`/posts/${node.slug}`}>{node.title}</a></h2>
<div dangerouslySetInnerHTML={{ __html: node.excerpt }} />
<p>Bởi {node.author.node.name} vào {new Date(node.date).toLocaleDateString()}</p>
</article>
))}
</div>
</main>
</div>
);
}
export async function getStaticProps() {
const data = await fetchAPI(GET_ALL_POSTS);
return {
props: {
posts: data.posts,
},
revalidate: 10, // Dữ liệu sẽ được tạo lại sau mỗi 10 giây (Incremental Static Regeneration)
};
}
Với đoạn code trên, khi bạn chạy ứng dụng Next.js, nó sẽ gọi đến API WordPress thông qua WPGraphQL, lấy 10 bài viết mới nhất và hiển thị chúng trên trang chủ. Bạn có thể mở rộng để tạo trang chi tiết bài viết (sử dụng getStaticPaths và getStaticProps) hoặc các loại nội dung khác.
Kết luận
Việc kết hợp Next.js với WordPress thông qua WPGraphQL không chỉ mang lại hiệu suất vượt trội mà còn mở ra vô vàn khả năng cho các nhà phát triển. Bạn có thể tận dụng sự tiện lợi của WordPress cho quản lý nội dung và sức mạnh của Next.js cho trải nghiệm người dùng hiện đại. Đây chính là tương lai của lập trình web Next.js, nơi WordPress không còn bị giới hạn bởi frontend truyền thống mà trở thành một backend mạnh mẽ, linh hoạt. Hy vọng hướng dẫn này đã giúp bạn có cái nhìn rõ ràng và tự tin hơn trong việc triển khai giải pháp WPGraphQL Next.js cho dự án của mình!
Câu hỏi thường gặp (FAQ)
- WPGraphQL có miễn phí không?
- Vâng, WPGraphQL là một plugin mã nguồn mở và hoàn toàn miễn phí để sử dụng.
- Tôi cần những kỹ năng gì để thực hiện kết nối này?
- Bạn nên có kiến thức cơ bản về WordPress (cài đặt plugin), JavaScript, React và Next.js. Hiểu biết về GraphQL là một lợi thế lớn nhưng không bắt buộc ban đầu vì WPGraphQL Playground rất trực quan.
- Next.js có hỗ trợ SEO tốt không khi kết nối với WordPress?
- Hoàn toàn có. Nhờ khả năng Server-Side Rendering (SSR) và Static Site Generation (SSG), Next.js giúp nội dung từ WordPress được render sẵn, rất thân thiện với các công cụ tìm kiếm, mang lại lợi thế SEO vượt trội so với các ứng dụng Single Page Application (SPA) thuần túy.

