스키마 튜토리얼
스키마 튜토리얼레슨 1: WordPress 데이터 검색

레슨 1: WordPress 데이터 검색

WordPress 내에서 데이터를 검색하는 기능은 여러 경우에 제한이 있으며, Gato GraphQL은 이러한 기능을 확장하는 데 도움이 됩니다.

대표적인 예로 커스텀 필드(즉, 메타 값)가 있습니다. 커스텀 필드를 사용하여 게시물(및 사용자, 댓글, 분류)에 추가 정보를 더할 수 있지만, 키워드로 게시물을 검색할 때 WordPress는 메타 값 내부를 검색하지 않습니다.

따라서 Gato GraphQL을 사용하여 메타 키와 값으로 게시물(및 사용자, 댓글, 분류)을 검색할 수 있습니다.

예시

  • 아래 쿼리를 퍼시스티드 쿼리로 생성하여 웹사이트에 저장하고 반복적으로 실행할 수 있도록 하세요
  • private 공개하여 wp-admin 내에서만, 그리고 관리자만 이용할 수 있도록 하세요
  • API 계층 구조를 사용하여 관리하세요 (예: 퍼시스티드 쿼리 internal을 모든 내부 쿼리의 상위로 설정: internal/search-posts-without-thumbnail, internal/search-users-by-locale 등)

이 쿼리는 썸네일이 있는 게시물과 없는 게시물을 모두 가져옵니다.

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 {
  argentineSpanishLocaleUsers: users(
    filter: {
      metaQuery: {
        key: "locale",
        compareBy: {
          stringValue: {
            value: "es_AR"
            operator: EQUALS
          }
        }
      }
    }
  ) {
    id
    name
    locale: metaValue(key: "locale")
  }
}

ANDOR 관계를 사용하여 데이터를 더 정밀하게 필터링할 수 있습니다. 이 쿼리는 썸네일이 있으면서 커스텀 메타 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
  }
}

메타 필터링은 표준 데이터 항목과 조합할 수도 있습니다. 이 쿼리는 특정 날짜 이후에 생성되고 "wordpress" 태그가 붙은 썸네일 없는 게시물을 모두 가져옵니다.

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

정규 표현식을 사용하여 메타를 검색할 수도 있습니다. 이 쿼리는 스페인어 로케일의 모든 사용자를 검색합니다 (예: 아르헨티나의 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")
  }
}