🥹Hãy triển khai sử dụng đã ngôn ngữ nextjs, wordpress sử dụng plugin polylang
1. Triển khai đã ngôn ngữ cho bài viết
package.json
{
"name": "langw",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev --turbopack",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@apollo/client": "^3.13.8",
"graphql": "^16.11.0",
"next": "15.3.2",
"react": "^19.0.0",
"react-dom": "^19.0.0"
},
"devDependencies": {
"@tailwindcss/postcss": "^4",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
"tailwindcss": "^4",
"typescript": "^5"
}
}
.env
src\lib\apollo.ts
middleware.ts
src\graphql\queries.ts

src\components\LanguageSwitcher.tsx

Home Page
src\app\[lang]\page.tsx
Layout
src\app\[lang]\layout.tsx
Page Detail
src\app\[lang]\[slug]\page.tsx
Post Details
src\app\[lang]\post\[slug]\page.tsx
Show Category In Home Page
src\app\[lang]\page.tsx
Get Posts By Category
src\app[lang]\category\[categorySlug]\page.tsx
src\graphql\queries.ts


Tiếp tục triển khai gói i18next
Cài đặt các gói cần thiết
Để triển khai một website sử dụng Next.js làm frontend và WordPress (với plugin Polylang) làm headless CMS hỗ trợ đa ngôn ngữ, ta cần:
🧩 Công nghệ sử dụng:
Next.js (App Router hoặc Pages Router tùy chọn)
WordPress với plugin Polylang
WPGraphQL (để truy vấn dữ liệu)
WPGraphQL Polylang (kết nối Polylang với WPGraphQL)
Apollo Client hoặc
graphql-requesttrên Next.js để fetch dữ liệu
✅ Cài đặt bên WordPress
Cài Plugin bắt buộc:
WPGraphQL
Polylang
WPGraphQL for Polylang
Tạo nội dung đa ngôn ngữ:
Vào Polylang → chọn ngôn ngữ như
vi,enKhi viết post/page/custom post type, tạo phiên bản cho mỗi ngôn ngữ
Cấu hình Permalink:
Chọn kiểu hiển thị ngôn ngữ (ví dụ:
/en/slug,/vi/slug)
🚀 Next.js – Thiết lập fetch dữ liệu đa ngôn ngữ
1. Cài thư viện
2. Cấu hình Apollo Client
3. Truy vấn GraphQL có đa ngôn ngữ
🌐 Next.js – Cấu trúc thư mục đa ngôn ngữ
Với App Router, dùng cấu trúc như sau:
Ví dụ app/[lang]/post/[slug]/page.tsx
app/[lang]/post/[slug]/page.tsx🌍 Chuyển đổi ngôn ngữ
Bạn có thể tạo một Language Switcher như sau:
📌 Gợi ý nâng cao
Dùng middleware để detect locale từ URL hoặc trình duyệt
Kết hợp với
next-intlnếu muốn quản lý text tĩnh dễ hơnTạo layout đa ngôn ngữ:
app/[lang]/layout.tsx→ giúp inject metadata theo locale
Bạn muốn mình giúp dựng sẵn một template đơn giản không? Hoặc bạn đang dùng App Router hay Pages Router để mình gửi đúng kiểu cấu trúc nhé.
Tuyệt! Dưới đây là cách tạo layout đa ngôn ngữ trong App Router (Next.js 13/14) khi bạn dùng WordPress + Polylang + WPGraphQL, với thư mục như sau:
🧩 Cấu trúc thư mục app/
app/📁 app/[lang]/layout.tsx – Layout đa ngôn ngữ
app/[lang]/layout.tsx – Layout đa ngôn ngữ🏠 app/[lang]/page.tsx – Trang chủ theo ngôn ngữ
app/[lang]/page.tsx – Trang chủ theo ngôn ngữ🔥 Chú ý: Trang Home ở WordPress phải có slug là
homeở cả 2 ngôn ngữ (và đặt làm Front Page).
✨ Tự động chuyển đổi ngôn ngữ (Language Switcher)
Bạn có thể lấy các bản dịch từ WPGraphQL (translations) và render nút chuyển ngôn ngữ:
🧠 Middleware (tùy chọn) – Redirect / → /vi hoặc /en
/ → /vi hoặc /enĐừng quên thêm middleware config trong
next.config.jsnếu cần.
Tuyệt vời! Dưới đây là bản template boilerplate dành cho Next.js (App Router) kết nối với WordPress sử dụng Polylang + WPGraphQL, hỗ trợ đa ngôn ngữ đầy đủ 🎉
🔧 1. Cấu trúc thư mục
📦 2. Cài đặt thư viện
🧠 3. File lib/apollo.ts
lib/apollo.ts📁 4. graphql/queries.ts
graphql/queries.ts🌍 5. app/[lang]/layout.tsx
app/[lang]/layout.tsx🏠 6. app/[lang]/page.tsx
app/[lang]/page.tsx📝 7. app/[lang]/post/[slug]/page.tsx
app/[lang]/post/[slug]/page.tsx🌐 8. middleware.ts
middleware.ts⚙️ 9. next.config.js
next.config.js🚀 Sử dụng
Tạo trang "home" trong WordPress cho cả
vivàenCài WPGraphQL, Polylang, WPGraphQL Polylang
Đảm bảo bạn truy cập
/vi,/en,/vi/post/ten-bai-viet, ...
👉 Muốn clone nhanh?
Nếu bạn muốn mình tạo repo GitHub public hoặc tạo file .zip để bạn tải về nhanh, mình có thể chuẩn bị ngay. Bạn muốn dạng nào? (GitHub hay .zip?)
4o
You said:
.zip
ChatGPT said:
Mình đã tạo xong file .zip cho boilerplate Next.js + WordPress + Polylang. Bạn có thể tải tại đây:
👉 Tải về dự án .zip
Nếu bạn cần thêm phần:
Tự động tạo sitemap theo từng ngôn ngữ
Kết nối với WP bằng Auth headers
Giao diện Tailwind UI đẹp mắt
Cứ nói nhé, mình hỗ trợ liền! 💪
Dưới đây là bản .zip đã cập nhật với các tính năng bạn yêu cầu:
✅ Sitemap động theo từng ngôn ngữ ✅ Kết nối WordPress sử dụng Authorization Bearer Token ✅ Giao diện đẹp với Tailwind CSS và theme dark mode
👉 Tải về dự án cập nhật (.zip)
Nếu bạn cần:
Cấu hình Tailwind nâng cao hơn
Hỗ trợ SSR hoặc ISR
Tự động tạo sitemap từ bài viết thực tế trong WordPress
Cứ nói nhé, mình làm tiếp cho bạn! 💻✨
Dĩ nhiên! Mình sẽ giúp bạn thêm menu chuyển đổi ngôn ngữ (LanguageSwitcher) dùng Polylang + WPGraphQL. Mục tiêu là:
Hiển thị các ngôn ngữ (VD: EN | VI)
Biết đang ở ngôn ngữ nào
Tự động điều hướng đúng route với slug tương ứng
Sử dụng WPGraphQL để lấy
translations
🧩 Bước 1: Tạo components/LanguageSwitcher.tsx
components/LanguageSwitcher.tsx🛠 Bước 2: Gọi LanguageSwitcher trong post page
LanguageSwitcher trong post pageTrong app/[lang]/post/[slug]/page.tsx, sau khi lấy post.translations, thêm:
🎁 Tuỳ chọn: Đặt vào layout.tsx nếu muốn luôn hiển thị trên header
layout.tsx nếu muốn luôn hiển thị trên headerBạn cũng có thể truyền translations qua layout (phức tạp hơn vì phải "hoist") — nếu bạn muốn mình làm phần này thì mình có thể hỗ trợ mở rộng logic layout để chứa LanguageSwitcher ở header trên mọi page.
Mình có thể cập nhật luôn trong project .zip nếu bạn muốn. Bạn muốn:
✅ Mình cập nhật lại
.zipvớiLanguageSwitcher✏️ Bạn tự thêm vào
Bạn chọn cách nào?
4o
You said:
Đặt vào layout.tsx
ChatGPT said:
🎉 Dự án đã được cập nhật với LanguageSwitcher trong layout.tsx và đã sẵn sàng tải về:
👉 Tải về project cuối cùng (.zip)
Tóm tắt thay đổi:
Tạo
components/LanguageSwitcher.tsxGọi nó trong
layout.tsx, hiển thị trên mọi trangHỗ trợ chuyển đổi
slughoặc fallback mặc địnhGiao diện Tailwind đơn giản, có thể tuỳ chỉnh dễ dàng
Nếu bạn muốn lấy translations từ post cụ thể thay vì hardcoded (/), mình có thể giúp bạn tích hợp WPGraphQL theo URL hiện tại.
Muốn mở rộng nữa không? 😄
Last updated
Was this helpful?