Вопрос или проблема
У меня есть продукт с тегом = CL Og test
. У меня есть метаполе в моем магазине, и при запросе оно возвращает следующее:
"node": {
"id": "gid://shopify/Metafield/32266534555929",
"key": "\"discountSpecs\"",
"value": "{\"selectedCollectionIds\":[\"gid://shopify/Collection/310827712556\"],\"tags\":[\"CL Og test\",\"VIP234234\"]}",
"namespace": "cldiscounts"
}
Затем я запрашиваю свою корзину так:
query RunInput($tags: [String!]) {
cart {
lines {
id
quantity
merchandise {
... on ProductVariant {
id
product {
handle
hasAnyTag(tags: $tags)
}
}
__typename
}
}
}
}
hasAnyTags всегда возвращает false, и я не понимаю, почему я уверен, что у продукта есть этот тег. Чтобы вызвать этот тег в функции, я установил его в shopify.extensions.toml на
[extensions.input.variables]
namespace = "cldiscounts"
key = "discountSpecs"
если я вручную устанавливаю
hasAnyTag(tags: “CL Og test”), то оно возвращает true. Есть идеи, почему не считывается тег в объекте json, который установлен?
Ответ или решение
Проблема, с которой вы столкнулись, заключается в том, что функция hasAnyTag
не распознает передаваемые теги, когда они берутся из переменной $tags
. Это может произойти по нескольким причинам:
-
Форматирование переменной: Убедитесь, что вы правильно передаете массив тегов в переменной
$tags
. Ваша переменная должна быть передана в правильном формате и содержать те же значения, что и теги, присвоенные продукту. Например:{ "tags": ["CL Og test"] }
Попробуйте проверить, как вы передаете переменную
$tags
в запросе. Возможно, стоит проверить, действительно ли массив содержит строковые значения без лишних пробелов или ошибок. -
Использование кавычек и экранирования: Обратите внимание на то, как вы используете кавычки в значениях. Если тег содержит кавычки или специальные символы, это может привести к неправильной обработке строки. Убедитесь, что строка не содержит дополнительного экранирования.
-
Проверка доступа к метаполям: Убедитесь, что объект метаполя действительно доступен на уровне, где осуществляется запрос. Возможно, метаполе с тегами не доступно для конкретного продукта в запрашиваемом контексте, и соответственно
hasAnyTag
не может выполнить проверку. -
Тестирование с фиксированными значениями: Если вы знаете, что при прямой передаче строки
hasAnyTag(tags: "CL Og test")
возвращаетtrue
, попробуйте выполнить запрос с другими тегами или непосредственно с тегами из метаполя, чтобы убедиться, что у вас есть доступ к нужной информации. -
Прослушивание изменений минимального уровня: Убедитесь, что если вы изменяете метаполе или теги, изменения отражаются в запросе. Иногда кэширование или неполные данные могут вызывать непредвиденные результаты.
Если вы перепроверили все вышеперечисленные пункты и проблема остается, возможно, имеет смысл создать новый запрос, который явно устанавливает переменную $tags
и проверяет, возвращает ли она ожидаемый результат:
query {
cart {
lines {
merchandise {
... on ProductVariant {
product {
handle
hasAnyTag(tags: ["CL Og test"])
}
}
}
}
}
}
Заяка выше поможет вам диагностировать, корректно ли работает функция с переданными данными.
Если все еще возникают трудности, я рекомендую обратиться в поддержку Shopify с полными деталями, так как проблемы могут быть связаны с конкретными настройками вашей витрины.