⭐️ Выпущена v4.2 с новыми мутациями для тегов и категорий, улучшенными мутациями для медиафайлов и расширенной интеграцией с Polylang (PRO)
Gato GraphQL v4.2 выпущена. Ознакомьтесь с примечаниями к релизу на GitHub для получения полного списка изменений.
Ниже приведены наиболее важные новые возможности.
Добавлены мутации для тегов и категорий
Теперь можно создавать, обновлять и удалять теги и категории записей с помощью новых мутаций:
PostCategory.deletePostCategory.updatePostTag.deletePostTag.updateRoot.createPostCategoryRoot.createPostTagRoot.deletePostCategoryRoot.deletePostTagRoot.updatePostCategoryRoot.updatePostTag
А также пользовательские теги и категории с помощью новых мутаций:
GenericCategory.deleteGenericCategory.updateGenericTag.deleteGenericTag.updateRoot.createCategoryRoot.createTagRoot.deleteCategoryRoot.deleteTagRoot.updateCategoryRoot.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 {
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] Определение языка Polylang в мутациях тегов и категорий
С интеграцией Polylang при создании тега или категории (см. выше) можно передать параметр polylangLanguageBy, чтобы сразу определить его язык.
Например, этот запрос создаёт категорию записи и определяет её язык как испанский:
mutation {
createPostCategory(input: {
name: "Noticias"
polylangLanguageBy: { code: "es" }
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
category {
polylangLanguage {
locale
}
name
}
}
}[PRO] Добавлены мутации Polylang для медиафайлов
PRO-модуль Polylang Mutations предоставляет мутации для интеграции с плагином Polylang.
Схема GraphQL дополнена мутациями для:
- Установки языка медиафайлов, и
- Определения связей между ними (т.е. указания, что набор медиафайлов является переводом друг друга).
| Мутация | Описание |
|---|---|
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
Теперь можно фильтровать сущности по языку по умолчанию, установленному в Polylang, передавая значение перечисления DEFAULT в фильтре polylangLanguagesBy:
{
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 в журналах информации
Полный ответ GraphQL для выполнения автоматизации (как для WP-Cron, так и для Automation Rules, независимо от того, было ли выполнение успешным или нет) записывается в файл wp-content/gatographql/logs/info.log.