บทช่วยสอน Schema
บทช่วยสอน Schemaบทเรียนที่ 1: การค้นหาข้อมูล WordPress

บทเรียนที่ 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")
  }
}