У меня возникла проблема при попытке очистить (удалить) метаполя с помощью API администратора Shopify GraphQL (версия 2025-04). Моя цель — удалить метаполе, чтобы после импорта метаполе не существовало для этого продукта. Согласно рекомендациям Shopify, если значение метаполя пусто, его следует удалить (а не просто установить пустую строку).
Код на Python
Я реализовал следующий подход в Python, используя библиотеку запросов для выполнения вызова GraphQL (вместе с сторожевым таймером для отслеживания изменений локальных файлов). Для метаполей, которые должны быть очищены, я явно устанавливаю в поле значения пустую строку ("") и выполняю мутацию, предназначенную для их очистки:
Код: Выделить всё
if clear_fields:
query_clear = """
mutation ClearMetafields($metafields: [MetafieldsSetInput!]!) {
metafieldsSet(metafields: $metafields) {
metafields {
key
namespace
value
updatedAt
}
userErrors {
field
message
}
}
}
"""
Мои полезные данные для метаполей, которые я хочу очистить, выглядят следующим образом:
Код: Выделить всё
"metafields": [
{
"ownerId": "gid://shopify/Product/9722952974604",
"namespace": "custom",
"key": "data_spedito_da",
"value": "",
"type": "single_line_text_field"
},
{
"ownerId": "gid://shopify/Product/9722952974604",
"namespace": "custom",
"key": "data_venduto_da",
"value": "",
"type": "single_line_text_field"
}
// ... additional fields ...
]
}
Вместо удаления метаполя API отвечает ошибкой, например:
Код: Выделить всё
[{
'field': ['metafields', '0', 'value'],
'message': "Value can't be blank."
}, ...]
Подробнее
Версия API:
- 2025-04
- Библиотека запросов Python для HTTP-вызовов и сторожевой таймер для мониторинга файлов.
Если значение метаполя при импорте CSV пусто, то это метаполе следует удалить. Мутация должна удалить метаполе (или, по крайней мере, привести к его отсутствию), а не оставить пустое значение.
Вопрос
- Как я могу этого добиться?
- Существует ли рекомендуемый подход или необходимая модификация полезных данных, которая позволяет мне обновить метаполе так, чтобы его значение стало пустым (очищенным) без полного удаления записи метаполя?
- Как передать значение, которое делает метаполе пустым, чтобы моя тема автоматически скрывала пустые значения, не вызывая при этом ошибку «Значение не может быть пустым»?
Подробнее здесь: https://stackoverflow.com/questions/795 ... e-explicit
Мобильная версия