บทเรียนที่ 1: การค้นหาข้อมูล WordPress
การค้นหาข้อมูลภายใน WordPress มีข้อจำกัดในหลายกรณี และ Gato GraphQL สามารถช่วยเสริมความสามารถเหล่านี้ได้
ตัวอย่างหนึ่งคือ custom field (กล่าวคือ meta value) เราอาจใช้ custom field เพื่อเพิ่มข้อมูลพิเศษให้กับโพสต์ (รวมถึงผู้ใช้ ความคิดเห็น และ taxonomy) อย่างไรก็ตาม เมื่อค้นหาโพสต์ด้วยคำสำคัญบางคำ WordPress จะไม่ค้นหาภายใน meta value
จากนั้นเราสามารถใช้ Gato GraphQL เพื่อค้นหาโพสต์ (รวมถึงผู้ใช้ ความคิดเห็น และ taxonomy) ตาม meta key และค่าได้
ตัวอย่าง
- สร้าง queries ด้านล่างเป็น Persisted Queries เพื่อเก็บไว้ในเว็บไซต์และเรียกใช้งานซ้ำได้ครั้งแล้วครั้งเล่า
- เผยแพร่เป็น
privateเพื่อให้ใช้งานได้เฉพาะภายใน wp-admin และเฉพาะผู้ดูแลระบบเท่านั้น - ใช้ ลำดับชั้นของ API เพื่อจัดการ queries เหล่านี้ (เช่น กำหนดให้ Persisted Query
internalเป็นต้นทางของ queries ภายในทั้งหมด:internal/search-posts-without-thumbnail,internal/search-users-by-localeเป็นต้น)
query นี้ดึงโพสต์ทั้งหมดที่มีภาพขนาดย่อ และโพสต์ที่ไม่มี:
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 นี้ดึงผู้ใช้ทั้งหมดที่ใช้ locale "ภาษาสเปนจากอาร์เจนตินา":
query {
argentineSpanishLocaleUsers: users(
filter: {
metaQuery: {
key: "locale",
compareBy: {
stringValue: {
value: "es_AR"
operator: EQUALS
}
}
}
}
) {
id
name
locale: metaValue(key: "locale")
}
}เราสามารถใช้ความสัมพันธ์ AND และ OR เพื่อกรองข้อมูลให้แม่นยำยิ่งขึ้น query นี้ดึงโพสต์ที่มีทั้งภาพขนาดย่อ และมี custom meta todo_action ที่มีค่า "replace" (หมายความว่าจำเป็นต้องเปลี่ยนภาพขนาดย่อ):
query {
posts(
filter: {
metaQuery: [
{
relation: AND
key: "_thumbnail_id",
compareBy: {
key: {
operator: EXISTS
}
}
},
{
key: "todo_action",
compareBy: {
stringValue: {
value: "replace"
operator: EQUALS
}
}
}
]
}
) {
id
title
}
}การกรองตาม meta ยังสามารถนำมาผสมกับรายการข้อมูลมาตรฐานใดๆ ได้ด้วย query นี้ดึงโพสต์ทั้งหมดที่ไม่มีภาพขนาดย่อ ซึ่งถูกสร้างขึ้นหลังจากวันที่กำหนด และถูกติดแท็ก "wordpress":
query {
posts(
filter: {
metaQuery: {
key: "_thumbnail_id",
compareBy: {
key: {
operator: NOT_EXISTS
}
}
},
dateQuery: {
after: "2020-07-01"
},
tagSlugs: [
"wordpress"
]
}
) {
id
title
tagNames
}
}เรายังสามารถค้นหา meta โดยใช้นิพจน์ regex ได้ด้วย query นี้ค้นหาผู้ใช้ทั้งหมดที่มี locale ภาษาสเปน (เช่น es_AR สำหรับอาร์เจนตินา, es_ES สำหรับสเปน เป็นต้น):
query {
spanishLocaleUsers: users(filter: { metaQuery: {
key: "locale",
compareBy: {
stringValue: {
value: "es_[A-Z]+"
operator: REGEXP
}
}
}}) {
id
name
locale: metaValue(key: "locale")
}
}