Tagging Shopify resources
Merchants commonly use Mechanic for adding or removing tags from customers, orders, products, and other Shopify resources.
When writing your task scripts, use a Shopify action to add or remove tags via the Shopify API.
GraphQL
Because the permission required varies based on what you're tagging, make sure to render a representative node ID during preview mode to avoid "TagsAdd access denied" errors. In this approach, we use stub data to create dynamic preview actions.
{% if event.preview %}
{% capture customer_json %}
{
"admin_graphql_api_id": "gid://shopify/Customer/12345"
}
{% endcapture %}
{% assign customer = customer_json | parse_json %}
{% endif %}
{% action "shopify" %}
mutation {
tagsAdd(
id: {{ customer.admin_graphql_api_id | json }}
tags: ["some", "new", "tags"]
) {
userErrors {
field
message
}
}
}
{% endaction %}
{% action "shopify" %}
mutation {
tagsRemove(
id: {{ customer.admin_graphql_api_id | json }}
tags: ["tags", "to", "remove"]
) {
userErrors {
field
message
}
}
}
{% endaction %}
Logging the results
GraphQL does not automatically log the results of a tagging operation. However, it's easy to include the final tags for a resource, in the results of your GraphQL mutation β very useful for proving that your mutation is doing what you expect, and also for allowing you to refer back to the current tagged state of the resource.
{% action "shopify" %}
mutation {
tagsAdd(
id: {{ customer.admin_graphql_api_id | json }}
tags: ["some", "new", "tags"]
) {
node {
... on Customer {
tags
}
}
userErrors {
field
message
}
}
}
{% endaction %}
Note the triple dots: the ... on <TYPE>
syntax marks an inline fragment. Replace "Customer" with the name of the GraphQL type you're working with (e.g. "Product", or "Order). Read more from Shopify: GraphQL / Advanced Concepts / Inline Fragments.
Last updated
Was this helpful?