Chuyển đến nội dung Chuyển đến thanh bên

Home » Tài liệu WPML » Các dự án liên quan » WPML GraphQL – Thêm chức năng đa ngôn ngữ vào WPGraphQL Schema

WPML GraphQL – Thêm chức năng đa ngôn ngữ vào WPGraphQL Schema

WPML GraphQL cho phép bạn truy vấn, lọc và lấy nội dung theo ngôn ngữ cụ thể cũng như các bản dịch từ WPGraphQL schema.

Các tính năng chính

Lọc nội dung theo ngôn ngữ, bao gồm bài viết, phân loại, bình luận, menu và các mục menu

Mở rộng WPGraphQL với các trường ngôn ngữ để lấy dữ liệu cụ thể từ plugin WPML

Truy vấn dữ liệu trên tất cả các ngôn ngữ đã cài đặt hoặc tập trung vào các ngôn ngữ cụ thể

Các plugin cần thiết

Để bắt đầu, hãy cài đặt và kích hoạt các plugin sau:

  • WPGraphQL
  • WPML
  • WPML String Translation
  • WPML GraphQL

Để bao gồm các trường đa ngôn ngữ từ plugin ACF trong WPGraphQL schema, hãy cài đặt thêm:

Bạn có thể làm gì với WPML GraphQL?

WPML GraphQL tích hợp với WPGraphQL để cho phép bạn truy vấn nội dung đa ngôn ngữ được tạo bằng WPML.

Từ GraphQL → GraphQL IDE , bạn có thể sử dụng Query Composer để:

  • Lấy thông tin ngôn ngữ cho bất kỳ nội dung nào bạn truy vấn
  • Truy cập bản dịch cho các bài viết, phân loại và bình luận
  • Lọc truy vấn của bạn theo ngôn ngữ
  • Truy vấn các bài viết cụ thể qua các ngôn ngữ bằng ID hoặc slug của chúng

Ví dụ, như hình ảnh bên dưới cho thấy, bạn có thể dễ dàng lấy danh sách tất cả các bài viết trên trang web của mình, kèm theo mã ngôn ngữ, slug, URI và chi tiết cho các bản dịch của chúng.

Sử dụng các trường ngôn ngữ trong Query Composer để lấy các bài viết ở tất cả các ngôn ngữ

Dưới đây, chúng tôi sẽ sử dụng một trang web thử nghiệm đa ngôn ngữ để hướng dẫn bạn cách sử dụng WPML GraphQL để truy vấn nội dung và các bản dịch của nó.

Truy vấn thông tin ngôn ngữ và bản dịch

Với WPML GraphQL, bạn có thể sử dụng các trường languagetranslation trong các truy vấn của mình:

  • Trường language cho phép bạn lấy các chi tiết như mã ngôn ngữ, URL cờ quốc gia, tên bản ngữ, tên đã dịch và URL trang chủ cho các loại bài viết, phân loại, menu, mục menu và bình luận.
  • Trường languageCode lấy mã ngôn ngữ cho các bài viết, thuật ngữ phân loại, menu, mục menu và bình luận mà không cần thêm chi tiết ngôn ngữ.
  • Trường translations lấy các bản dịch cho các loại bài viết và thuật ngữ phân loại.

Khi bạn truy vấn bình luận, các trường languagelanguageCode sẽ khớp với ngôn ngữ của bài viết mà chúng thuộc về.

Đây là ví dụ về một truy vấn lấy các bài viết cùng với các chi tiết liên quan, bao gồm slug bài viết, URI, mã ngôn ngữ, danh mục và bất kỳ bản dịch nào hiện có:

query Posts{
  posts(where: {language: "en"}) {
  nodes {
  slug
  uri
  language {
  code
  }
  categories {
  nodes {
  name
  }
  }
  translations {
  slug
  uri
  language {
  code
  }
  categories {
  nodes {
  name
  }
  }
  }
  }
  }
}

Việc chạy truy vấn này sẽ trả về thông tin ngôn ngữ và bản dịch cho mỗi bài viết, cùng với các mục được kết nối như danh mục. Các kết nối sẽ tự động tuân theo ngôn ngữ của mục cấp cao nhất (trong trường hợp này là các bài viết):

{
  "data": {
  "posts": {
  "nodes": [
  {
  "slug": "bye-world",
  "uri": "/2023/05/18/bye-world/",
  "language": {
  "code": "en"
  },
  "categories": {
  "nodes": [
  {
  "name": "End of the day"
  },
  {
  "name": "Greetings"
  }
  ]
  },
  "translations": [
  {
  "slug": "adios-mundo",
  "uri": "/es/2023/05/18/adios-mundo/",
  "language": {
  "code": "es"
  },
  "categories": {
  "nodes": [
  {
  "name": "Fin del día"
  },
  {
  "name": "Saludos"
  }
  ]
  }
  },
  {
  "slug": "tchau-mundo",
  "uri": "/pt-pt/2023/05/18/tchau-mundo/",
  "language": {
  "code": "pt-pt"
  },
  "categories": {
  "nodes": [
  {
  "name": "Fim do dia"
  },
  {
  "name": "Saudações"
  }
  ]
  }
  }
  ]
  },
  {
  "slug": "hello-world",
  "uri": "/2018/07/05/hello-world/",
  language {
  code
  },
  categories {
  nodes {
  {
  name
  },
  {
  name
  }
  ]
  },
  translations {
  {
  slug
  uri
  language {
  code
  },
  categories {
  nodes {
  {
  name
  },
  {
  name
  }
  ]
  }
  },
  {
  slug
  uri
  language {
  code
  },
  categories {
  nodes {
  {
  name
  },
  {
  name
  }
  ]
  }
  }
  ]
  }
  ]
  }
  }
}

Lọc ngôn ngữ

WPML GraphQL cho phép bạn sử dụng bộ lọc language để:

  • Lọc bài viết, thuật ngữ phân loại, menu, mục menu hoặc bình luận theo một ngôn ngữ cụ thể
  • Lấy nội dung bằng một ngôn ngữ cụ thể bằng cách thiết lập bộ lọc tương ứng
  • Lấy tất cả nội dung, bất kể ngôn ngữ, bằng cách đặt giá trị bộ lọc thành all

WPML GraphQL hỗ trợ các kết nối, vì vậy khi bạn lọc một mục cấp cao nhất như bài viết theo ngôn ngữ, tất cả các mục liên quan, chẳng hạn như danh mục và thẻ, sẽ tự động tuân theo cùng một ngôn ngữ đó. Điều này giúp các truy vấn của bạn nhất quán và chính xác.

Đây là ví dụ về một truy vấn lấy các bài viết bằng tiếng Tây Ban Nha, bao gồm slug, URI và các danh mục được kết nối của chúng:

query PostsES{
  posts(where: {language: "es"}) {
  nodes {
  slug
  uri
  categories {
  nodes {
  name
  }
  }
  }
  }
}

Sau đây là kết quả trả về của truy vấn:

{
  "data": {
  "posts": {
  "nodes": [
  {
  "slug": "adios-mundo",
  "uri": "/es/2023/05/18/adios-mundo/",
  "categories": {
  "nodes": [
  {
  "name": "Fin del día"
  },
  {
  "name": "Saludos"
  }
  ]
  }
  },
  {
  "slug": "hola-mundo",
  "uri": "/es/2018/07/05/hola-mundo/",
  "categories": {
  "nodes": [
  {
  "name": "Inicio del día"
  },
  {
  "name": "Saludos"
  }
  ]
  }
  }
  ]
  }
  }
}

Truy vấn các bài viết cụ thể qua các ngôn ngữ

Với WPML GraphQL, bạn cũng có thể truy vấn các bài viết riêng lẻ bằng bất kỳ ngôn ngữ nào thông qua ID bài viết hoặc slug.

Ví dụ: nếu bạn có một bài viết có tiêu đề ¡Hola mundo! (bản dịch tiếng Tây Ban Nha của Hello world!), với slug là hola-mundo và ID bài viết là 2, bạn có thể sử dụng các truy vấn sau để lấy bài viết đó:

query PostBySlug {
  post(id: "hola-mundo", idType: SLUG) {
  title
  slug
  uri
  }
}

query PostById {
  post(id: "2", idType: DATABASE_ID) {
  title
  slug
  uri
  }
}

Cả hai truy vấn sẽ trả về chính xác dữ liệu bài viết, bao gồm tiêu đề, slug và URI cho bài viết ¡Hola mundo!:

{
  "data": {
  "post": {
  "title": "¡Hola mundo!",
  "slug": "hola-mundo",
  "uri": "/es/2018/07/05/hola-mundo/"
  }
  }
}

Truy vấn dữ liệu từ các ngôn ngữ đã cài đặt

WPML GraphQL cung cấp hai truy vấn để truy cập dữ liệu về các ngôn ngữ được cài đặt trên trang web của bạn:

  • Truy vấn ngôn ngữ lấy tất cả các ngôn ngữ đã đăng ký cùng với dữ liệu có liên quan cho từng ngôn ngữ
  • Truy vấn defaultLanguage lấy thông tin về ngôn ngữ mặc định được thiết lập trên trang web của bạn

Các truy vấn này có thể hữu ích nếu bạn đang muốn xây dựng các tính năng như bộ chuyển đổi ngôn ngữ.

Ví dụ, để lấy dữ liệu cho tất cả các ngôn ngữ đã cài đặt, bạn có thể chạy truy vấn sau:

query Languages {
  languages {
  code
  country_flag_url
  default_locale
  native_name
  translated_name
  url
  }
}

Truy vấn trên tạo ra kết quả sau:

{
  "data": {
  "languages": [
  {
  "code": "en",
  "country_flag_url": "http://site.com/wp-content/plugins/sitepress-multilingual-cms-release/res/flags/en.svg",
  "default_locale": "en_US",
  "native_name": "English",
  "translated_name": "English",
  "url": "http://site.com"
  },
  {
  "code": "es",
  "country_flag_url": "http://site.com/wp-content/plugins/sitepress-multilingual-cms-release/res/flags/es.svg",
  "default_locale": "es_ES",
  "native_name": "Español",
  "translated_name": "Spanish",
  "url": "http://site.com/es/"
  },
  {
  "code": "it",
  "country_flag_url": "http://site.com/wp-content/plugins/sitepress-multilingual-cms-release/res/flags/it.svg",
  "default_locale": "it_IT",
  "native_name": "Italiano",
  "translated_name": "Italian",
  "url": "http://site.com/it/"
  }
  ]
  }
}

Sử dụng WPML GraphQL với ACF

Nếu bạn đang sử dụng WPGraphQL với plugin ACF, các tiện ích bổ sung WPML GraphQL và ACFML (ACF Multilingual) sẽ mở rộng chức năng này. Điều này cho phép bạn truy vấn dữ liệu trường tùy chỉnh bằng các ngôn ngữ khác nhau.

WPGraphQL cùng với phần mở rộng ACF của nó hiển thị các Trang Tùy chọn ACF (ACF Options Pages) dưới dạng các đối tượng gốc. Cùng với nhau, WPML GraphQL và các tiện ích bổ sung ACFML thêm một tham số ngôn ngữ vào các truy vấn Trang Tùy chọn, yêu cầu một mã ngôn ngữ khớp với một trong các ngôn ngữ đang hoạt động trên trang web của bạn (ví dụ: “de”, “pt-pt”). Điều này cho phép bạn truy vấn dữ liệu bằng một ngôn ngữ cụ thể:

query NewQuery {
  myOptionPage(language: "de") {
  addressFieldGroup {
  addressTitle
  repeaterAddressDetails {
  addressDetails
  }
  }
  }
}

Bắt đầu với WPML GraphQL

Để sử dụng WPML GraphQL, bạn cần có gói WPML Multilingual CMS hoặc WPML Multilingual Agency. Cả hai gói đều cung cấp quyền truy cập vào plugin WPML và một loạt các tiện ích bổ sung khác, tất cả đều được bao gồm mà không tính thêm phí.

Xem gói nào phù hợp nhất cho trang web của bạn.

Cần trợ giúp?

Nếu bạn gặp khó khăn khi sử dụng WPML GraphQL, hãy truy cập trang Các vấn đề đã biết và Giải pháp của chúng tôi để biết các mẹo khắc phục sự cố.

Bạn vẫn cần trợ giúp? Hãy gửi phiếu hỗ trợ .

Đã cập nhật
6 Tháng năm, 2026