Tutorial skema
Tutorial skemaPelajaran 1: Mencari data WordPress

Pelajaran 1: Mencari data WordPress

Mencari data di dalam WordPress memiliki keterbatasan dalam beberapa kasus, dan Gato GraphQL dapat membantu memperluas kemampuan ini.

Salah satu contohnya melibatkan custom fields (yaitu, meta values): Kita dapat menggunakan custom fields untuk menambahkan informasi tambahan ke postingan (dan juga ke pengguna, komentar, dan taksonomi), namun saat mencari postingan dengan kata kunci tertentu, WordPress tidak mencari di dalam meta values.

Kita kemudian dapat menggunakan Gato GraphQL untuk mencari postingan (dan juga pengguna, komentar, dan taksonomi) berdasarkan kunci dan nilai meta.

Contoh

  • Buat queries di bawah ini sebagai Persisted Queries, agar tersimpan di website dan dapat dieksekusi berulang kali
  • Publikasikan sebagai private, agar hanya tersedia di dalam wp-admin, dan hanya untuk admin
  • Gunakan hierarki API untuk mengelolanya (misalnya: jadikan Persisted Query internal sebagai leluhur dari semua query internal: internal/search-posts-without-thumbnail, internal/search-users-by-locale, dll)

Query ini mengambil semua postingan yang memiliki thumbnail, dan yang tidak memilikinya:

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 ini mengambil semua pengguna yang menggunakan locale "Bahasa Spanyol dari Argentina":

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

Kita dapat menggunakan relasi AND dan OR untuk memfilter data dengan lebih tepat. Query ini mengambil postingan yang memiliki thumbnail sekaligus memiliki custom meta todo_action dengan nilai "replace" (yang berarti thumbnail-nya perlu diganti):

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

Pemfilteran berdasarkan meta juga dapat dikombinasikan dengan item data standar lainnya. Query ini mengambil semua postingan tanpa thumbnail yang dibuat setelah tanggal tertentu dan telah diberi tag "wordpress":

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

Kita juga dapat mencari meta menggunakan ekspresi regex. Query ini mencari semua pengguna dengan locale Spanyol (misalnya, es_AR untuk Argentina, es_ES untuk Spanyol, dan seterusnya):

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