Hướng dẫn schema
Hướng dẫn schemaBài 1: Tìm kiếm dữ liệu WordPress

Bài 1: Tìm kiếm dữ liệu WordPress

Việc tìm kiếm dữ liệu trong WordPress bị giới hạn trong nhiều trường hợp, và Gato GraphQL có thể giúp mở rộng các khả năng này.

Một ví dụ điển hình là với các trường tùy chỉnh (tức là meta values): Chúng ta có thể dùng các trường tùy chỉnh để thêm thông tin bổ sung vào bài viết (cũng như người dùng, bình luận và taxonomies), tuy nhiên khi tìm kiếm bài viết theo từ khóa, WordPress không tìm kiếm trong các meta values.

Chúng ta có thể sử dụng Gato GraphQL để tìm kiếm bài viết (cũng như người dùng, bình luận và taxonomies) theo meta key và value.

Ví dụ

  • Tạo các queries bên dưới dưới dạng Persisted Queries, để lưu trữ chúng trên website và thực thi nhiều lần
  • Xuất bản chúng dưới dạng private, để chúng chỉ khả dụng trong wp-admin và chỉ dành cho quản trị viên
  • Sử dụng API hierarchy để quản lý chúng (ví dụ: có một Persisted Query internal làm tổ tiên cho tất cả các queries nội bộ: internal/search-posts-without-thumbnail, internal/search-users-by-locale, v.v.)

Query này lấy tất cả các bài viết có thumbnail và những bài viết không có thumbnail:

query {
  postsWithThumbnail: posts(
    filter: {
      metaQuery: {
        key: "_thumbnail_id",
        compareBy: {
          key: {
            operator: EXISTS
          }
        }
      }
    }
  ) {
    id
    title
    featuredImage {
      id
      src
    }
  }
 
  postsWithoutThumbnail: posts(
    filter: {
      metaQuery: {
        key: "_thumbnail_id",
        compareBy: {
          key: {
            operator: NOT_EXISTS
          }
        }
      }
    }
  ) {
    id
    title
  }
}

Query này lấy tất cả người dùng sử dụng ngôn ngữ "Tiếng Tây Ban Nha của Argentina":

query {
  argentineSpanishLocaleUsers: users(
    filter: {
      metaQuery: {
        key: "locale",
        compareBy: {
          stringValue: {
            value: "es_AR"
            operator: EQUALS
          }
        }
      }
    }
  ) {
    id
    name
    locale: metaValue(key: "locale")
  }
}

Chúng ta có thể sử dụng các quan hệ ANDOR để lọc dữ liệu chính xác hơn. Query này lấy các bài viết vừa có thumbnail, vừa có meta tùy chỉnh todo_action với giá trị "replace" (nghĩa là thumbnail cần được thay thế):

query {
  posts(
    filter: {
      metaQuery: [
        {
          relation: AND
          key: "_thumbnail_id",
          compareBy: {
            key: {
              operator: EXISTS
            }
          }
        },
        {
          key: "todo_action",
          compareBy: {
            stringValue: {
              value: "replace"
              operator: EQUALS
            }
          }
        }
      ]
    }
  ) {
    id
    title
  }
}

Lọc theo meta cũng có thể kết hợp với bất kỳ mục dữ liệu tiêu chuẩn nào. Query này lấy tất cả các bài viết không có thumbnail được tạo sau một ngày nhất định và đã được gắn tag "wordpress":

query {
  posts(
    filter: {
      metaQuery: {
        key: "_thumbnail_id",
        compareBy: {
          key: {
            operator: NOT_EXISTS
          }
        }
      },
      dateQuery: {
        after: "2020-07-01"
      },
      tagSlugs: [
        "wordpress"
      ]
    }
  ) {
    id
    title
    tagNames
  }
}

Chúng ta cũng có thể tìm kiếm meta bằng biểu thức regex. Query này tìm kiếm tất cả người dùng có ngôn ngữ Tây Ban Nha (ví dụ: es_AR cho Argentina, es_ES cho Tây Ban Nha, v.v.):

query {
  spanishLocaleUsers: users(filter: { metaQuery: {
    key: "locale",
    compareBy: {
      stringValue: {
        value: "es_[A-Z]+"
        operator: REGEXP
      }
    }
  }}) {
    id
    name
    locale: metaValue(key: "locale")
  }
}