블로그

⭐️ v4.2 릴리스: 태그 및 카테고리를 위한 새로운 mutation, 미디어를 위한 개선된 mutation, Polylang 통합 강화 (PRO)

Leonardo Losoviz
작성자: Leonardo Losoviz ·

Gato GraphQL v4.2 가 릴리스되었습니다. 변경 사항의 전체 목록은 GitHub 릴리스 노트를 확인하세요.

아래는 가장 중요한 새로운 기능들입니다.

태그 및 카테고리를 위한 mutation 추가

새롭게 추가된 mutation으로 포스트 태그와 카테고리를 생성, 업데이트, 삭제할 수 있게 되었습니다:

  • PostCategory.delete
  • PostCategory.update
  • PostTag.delete
  • PostTag.update
  • Root.createPostCategory
  • Root.createPostTag
  • Root.deletePostCategory
  • Root.deletePostTag
  • Root.updatePostCategory
  • Root.updatePostTag

또한 커스텀 태그와 카테고리도 새롭게 추가된 mutation으로 지원됩니다:

  • GenericCategory.delete
  • GenericCategory.update
  • GenericTag.delete
  • GenericTag.update
  • Root.createCategory
  • Root.createTag
  • Root.deleteCategory
  • Root.deleteTag
  • Root.updateCategory
  • Root.updateTag

이 쿼리는 포스트 태그 텀을 생성, 업데이트, 삭제합니다:

mutation CreateUpdateDeletePostTags {
  createPostTag(input: {
    name: "Some name"
    slug: "Some slug"
    description: "Some description"
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    category {
      ...PostTagData
    }
  }
 
  updatePostTag(input: {
    id: 1
    name: "Some updated name"
    slug: "Some updated slug"
    description: "Some updated description"
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    category {
      ...PostTagData
    }
  }
 
  deletePostTag(input: {
    id: 1
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
}
 
fragment PostTagData on PostTag {
  id
  name
  slug
  description
}

이 쿼리는 포스트 카테고리 텀을 생성, 업데이트, 삭제합니다:

mutation CreateUpdateDeletePostCategories {
  createPostCategory(input: {
    name: "Some name"
    slug: "Some slug"
    description: "Some description"
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    category {
      ...PostCategoryData
    }
  }
 
  updatePostCategory(input: {
    id: 1
    name: "Some updated name"
    slug: "Some updated slug"
    description: "Some updated description"
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    category {
      ...PostCategoryData
    }
  }
 
  deletePostCategory(input: {
    id: 1
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
}
 
fragment PostCategoryData on PostCategory {
  id
  name
  slug
  description
  parent {
    id
  }
}

이 쿼리는 커스텀 some-tag-taxonomy 태그의 태그 텀을 생성, 업데이트, 삭제합니다:

mutation CreateUpdateDeleteTags {
  createTag(input: {
    taxonomy: "some-tag-taxonomy",
    name: "Some name"
    slug: "Some slug"
    description: "Some description"
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    category {
      ...TagData
    }
  }
 
  updateTag(input: {
    id: 1
    taxonomy: "some-tag-taxonomy"
    name: "Some updated name"
    slug: "Some updated slug"
    description: "Some updated description"
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    category {
      ...TagData
    }
  }
 
  deleteTag(input: {
    id: 1
    taxonomy: "some-tag-taxonomy"
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
}
 
fragment TagData on Tag {
  id
  name
  slug
  description
}

이 쿼리는 커스텀 some-cat-taxonomy 카테고리의 카테고리 텀을 생성, 업데이트, 삭제합니다:

mutation CreateUpdateDeleteCategories {
  createCategory(input: {
    taxonomy: "some-cat-taxonomy",
    name: "Some name"
    slug: "Some slug"
    description: "Some description"
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    category {
      ...CategoryData
    }
  }
 
  updateCategory(input: {
    id: 1
    taxonomy: "some-cat-taxonomy"
    name: "Some updated name"
    slug: "Some updated slug"
    description: "Some updated description"
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    category {
      ...CategoryData
    }
  }
 
  deleteCategory(input: {
    id: 1
    taxonomy: "some-cat-taxonomy"
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
}
 
fragment CategoryData on Category {
  id
  name
  slug
  description
  parent {
    id
  }
}

기존 미디어 아이템의 첨부 파일을 사용하여 미디어 아이템 생성

createMediaItem mutation은 이제 기존 미디어 아이템과 동일한 첨부 파일을 사용하여 새로운 미디어 아이템을 생성할 수 있습니다 (즉, 디스크에 파일을 복제하지 않고도):

mutation {
  createMediaItem(input: {
    from: {
      mediaItemBy: {
        id: 337
      }
    }
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    mediaItem {
      id  # New media item created
      src # Same attachment as the provided media item
    }
  }
}

[PRO] 태그 및 카테고리 mutation에서 Polylang 언어 지정

Polylang 통합을 사용하면 태그나 카테고리를 생성할 때 (위 참조) polylangLanguageBy 입력을 전달하여 언어를 미리 정의할 수 있습니다.

예를 들어, 이 쿼리는 포스트 카테고리를 생성하고 그 언어를 스페인어로 정의합니다:

mutation {
  createPostCategory(input: {
    name: "Noticias"
    polylangLanguageBy: { code: "es" }
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    category {
      polylangLanguage {
        locale
      }
      name
    }
  }
}

[PRO] 미디어 아이템을 위한 Polylang mutation 추가

PRO 모듈 Polylang MutationsPolylang 플러그인과의 통합을 위한 mutation을 제공합니다.

GraphQL 스키마가 다음과 같은 mutation으로 보강되었습니다:

  • 미디어 아이템의 언어 설정, 그리고
  • 미디어 아이템 간의 연관 관계 정의 (즉, 미디어 아이템 집합이 서로의 번역임을 표시).
Mutation설명
polylangSetMediaItemLanguage미디어 아이템의 언어를 설정합니다.
polylangSaveMediaItemTranslationAssociation미디어 아이템의 번역 연관 관계를 설정합니다.

예를 들어, 다음 쿼리는 3개의 미디어 아이템에 대해 언어를 정의하고 (영어, 스페인어, 프랑스어), 이 3개의 미디어 아이템이 서로의 번역임을 정의합니다:

mutation {
  mediaItem1: polylangSetMediaItemLanguage(input: {id: 1007, languageBy: { code: "en" }}) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
  mediaItem2: polylangSetMediaItemLanguage(input: {id: 204, languageBy: { code: "es" }}) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
  mediaItem3: polylangSetMediaItemLanguage(input: {id: 377, languageBy: { code: "fr" }}) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
  polylangSaveMediaItemTranslationAssociation(input: {
    ids: [1007, 204, 377]
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
}

[PRO] Polylang의 기본 언어로 엔티티 필터링

이제 polylangLanguagesBy 필터에 DEFAULT 열거형 값을 제공하여 Polylang에 설정된 기본 언어로 엔티티를 필터링할 수 있습니다:

{
  posts(
    filter: {
      polylangLanguagesBy: {
        predefined: DEFAULT
      }
    }
  ) {
    title
    polylangLanguage {
      code
    }
  }
 
  pages(
    filter: {
      polylangLanguagesBy: {
        predefined: DEFAULT
      }
    }
  ) {
    title
    polylangLanguage {
      code
    }
  }
 
  customPosts(
    filter: {
      polylangLanguagesBy: {
        predefined: DEFAULT
      }
      customPostTypes: "dummy-cpt"
    }
  ) {
    title
    polylangLanguage {
      code
    }
  }
}

[PRO] 자동화: GraphQL 응답을 info 로그에 저장

자동화 실행에 대한 완전한 GraphQL 응답 (WP-Cron 및 자동화 규칙 모두, 실행 성공 여부와 관계없이)이 wp-content/gatographql/logs/info.log 파일에 기록됩니다.


뉴스레터 구독하기

Gato GraphQL의 모든 업데이트를 놓치지 마세요.