🥹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

37KB
archive
Open
8MB
Open
191KB
archive
Open

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-request trên Next.js để fetch dữ liệu


✅ Cài đặt bên WordPress

  1. Cài Plugin bắt buộc:

    • WPGraphQL

    • Polylang

    • WPGraphQL for Polylang

  2. Tạo nội dung đa ngôn ngữ:

    • Vào Polylang → chọn ngôn ngữ như vi, en

    • Khi viết post/page/custom post type, tạo phiên bản cho mỗi ngôn ngữ

  3. 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


🌍 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-intl nếu muốn quản lý text tĩnh dễ hơn

  • Tạ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/[lang]/layout.tsx – Layout đa 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

Đừng quên thêm middleware config trong next.config.js nế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


📁 4. graphql/queries.ts


🌍 5. app/[lang]/layout.tsx


🏠 6. app/[lang]/page.tsx


📝 7. app/[lang]/post/[slug]/page.tsx


🌐 8. middleware.ts


⚙️ 9. next.config.js


🚀 Sử dụng

  1. Tạo trang "home" trong WordPress cho cả vien

  2. Cài WPGraphQL, Polylang, WPGraphQL Polylang

  3. Đả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


🛠 Bước 2: Gọi LanguageSwitcher trong post page

Trong 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

Bạ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:

  1. ✅ Mình cập nhật lại .zip với LanguageSwitcher

  2. ✏️ 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.tsx

  • Gọi nó trong layout.tsx, hiển thị trên mọi trang

  • Hỗ trợ chuyển đổi slug hoặc fallback mặc định

  • Giao 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?