Prijzen van bundels automatisch synchroniseren bij prijswijzigingen van varianten
Shopify-bundels worden automatisch bijgewerkt wanneer de prijs van een variant verandert, met behulp van Shopify Flow.
Wanneer u de app (Shopify) gebruikt om productbundels aan te maken, wordt de variantprijs van het bundelproduct niet automatisch bijgewerkt wanneer de variantprijs van een afzonderlijk product in de bundel wordt gewijzigd. De trigger ‘Productvariant Price Changed’ () Workflow Trigger Extensions lost dit op door de prijswijziging te detecteren en de variantprijs van de bundel automatisch opnieuw te berekenen en bij te werken.
We gaan uit van het volgende scenario om te begrijpen hoe we de trigger ‘Productvariantprijs gewijzigd’ kunnen gebruiken om de prijzen van bundels synchroon te houden.
Scenario: De prijs van een bundel automatisch aanpassen wanneer de prijs van een componentvariant verandert
Stel dat u een bundelproduct (bijvoorbeeld een T-shirtbundel) hebt aangemaakt met de app ‘ShopifyBundles’. De bundel bevat drie afzonderlijke producten: een zwart T-shirt, een grijs T-shirt en een wit T-shirt, die elk € 10,00 per variant kosten. De prijs van de bundelvariant bedraagt € 30,00 (de som van alle prijzen van de afzonderlijke producten). Wanneer u de prijs van een variant van een afzonderlijk product wijzigt, zal deze Shopify Flow automatisch de bijbehorende prijs van de bundelvariant bijwerken.
Schakel deze trigger in via de app-instellingen -> Productvarianten -> Prijswijzigingen per variant
Prijswijziging productvariant
Haal het bovenliggende bundelproduct op, bereken de bijgewerkte variantprijzen en werk de prijzen van de bundelvarianten in één keer bij via de Admin API
Videogids
U kunt de stappen ook visueel volgen in deze video (de video bevat geen geluid; u kunt de afspeelsnelheid naar eigen wens aanpassen)
Hoe wij Shopify Flow zullen gebruiken om dit te laten verlopen
Inzicht in de opzet
- Wij hebben een product met varianten (bijvoorbeeld een grijs T-shirt) in de maten S, M, L, XL en 2XL, die elk € 10,00 kosten.
- Wij hebben een bundelproduct aangemaakt met de app ‘Shopify Bundles’. Deze bevat 3 gebundelde producten (zwart T-shirt, grijs T-shirt, wit T-shirt), elk met 5 varianten. De prijs van de bundelvariant bedraagt € 30,00 (som van de prijzen van de afzonderlijke producten: 3 × € 10,00).
Hier kunt u de gevolgde stappen visueel bekijken:
- Ga in ‘Workflow Trigger Extensions’ naar ‘Triggers’, zoek naar ‘Prijs’ en schakel ‘Prijswijziging productvariant’ in. Hiervoor is toegang tot product-, variant- en collectiegegevens vereist; de app vraagt hierom indien deze toegang ontbreekt.
- Maak een nieuwe lege workflow aan vanuit de app Shopify Flow en selecteer de trigger „Productvariantprijs gewijzigd” uit de app „Workflow Trigger Extensions”
- Voeg een actie ‘Productgegevens ophalen’ toe om het gewijzigde product op te halen met behulp van een geavanceerde zoekopdracht, gesorteerd op ‘aangemaakt op’ in oplopende volgorde. Deze stap haalt de informatie over de bovenliggende bundel van het product op via het veld
productParents. De zoekopdracht ziet er als volgt uit:id:{{productVariant.product.id | split: "gid://shopify/Product/" | last}} - Voeg een stap ‘Code uitvoeren’ toe om de product-ID van het bovenliggende bundelproduct uit het resultaat van
getProductDatate halen. De code haalt de product-ID’s van de bovenliggende producten op uitproductParentsen stelt een tekenreeksidsConditionsamen voor het uitvoeren van een zoekopdracht.
De stap ‘Code uitvoeren’ maakt gebruik van de volgende GraphQL-invoer, JavaScript-code en uitvoer om de ID’s van de bovenliggende producten op te halen:
Voer de stap ‘Code uitvoeren’ uit, waarin de GraphQL-invoer, de JavaScript-code en de voorbeeldweergave worden getoond


{
getProductData {
productParents {
id
}
}
}export default function main(input) {
const productIds = input.getProductData[0]?.productParents?.map(p => p.id) ?? [];
const productId = productIds[0] ?? null;
const idsCondition = productIds
.map(gid => "id:" + gid.split("gid://shopify/Product/").pop())
.join(" OR ");
return {
productId: productId,
productIds: productIds,
idsCondition: idsCondition,
};
}type Output {
productId: String
productIds: [String!]!
idsCondition: String!
}- Voeg een stap ‘Voorwaarde’ toe die controleert of de uitvoer van de code ‘Uitvoeren’
productIdniet leeg is en daadwerkelijk bestaat. Dit zorgt ervoor dat wij pas verdergaan wanneer het gewijzigde product daadwerkelijk deel uitmaakt van een bundel. - Waar → de bundelprijs blijven bijwerken
- Onjuist → stop (het product maakt geen deel uit van een bundel)
- Indien de voorwaarde ‘True’ is, voegt u nog een actie ‘Productgegevens ophalen (1)’ toe om de variant- en prijsgegevens van het bovenliggende bundelproduct op te halen met behulp van de
idsConditionuit de stap ‘Code uitvoeren’. - Voeg een tweede stap ‘Code uitvoeren (1)’ toe om de prijzen van de nieuwe bundelvarianten te berekenen op basis van de bijgewerkte componentprijzen. Deze stap genereert een array met de waarde
variantPrices, waarin de nieuwe prijzen voor elke bundelvariant zijn opgenomen.
Deze stap ‘Run code (1)’ berekent de prijzen van de bundelvarianten opnieuw op basis van de bijgewerkte componentprijs. Dit is wat er gebeurt: allereerst haalt het twee belangrijke gegevens uit de trigger:
changedVariantIdde variant die zojuist is gewijzigd (...158920)newPricede nieuwe prijs voor die variant (11.00). Vervolgens doorloopt het systeem alle bundelvarianten en berekent het de totale prijs opnieuw. Elke bundelvariant bestaat uit 3 componentvarianten (zwart T-shirt, grijs T-shirt, wit T-shirt). Voor elk onderdeel wordt gecontroleerd: is dit de variant die zojuist is gewijzigd? Zo ja, gebruik dannewPrice(11,00) in plaats van de verouderde prijs die nog steeds is opgeslagen in Shopify (10,00). Zo nee, gebruik dan de bestaandecomponent.productVariant.price.It telt de prijzen van de onderdelen bij elkaar op om de nieuwe prijs van de bundelvariant te verkrijgen. U kunt zien hoe dit werkt in uw uitvoergegevens. Bekijk variant...088840: de componenten hiervan omvatten...158920(de gewijzigde variant). De prijs bedraagt dus 11 + 10 + 10 = 31, terwijl alle andere bundelvarianten nog steeds op 30 uitkomen omdat geen van hun componenten is gewijzigd.Dit is het belangrijkste inzicht van deze stap: Shopify heeft de componentprijs in de bundelgegevens nog niet bijgewerkt, dus de code kan niet zomaar de bestaande prijzen bij elkaar optellen, maar moet de nieuwe prijs voor de gewijzigde variant direct ter plekke invoeren. Zonder deze aanpassing zouden alle varianten nog steeds 30 weergeven. De uitvoervariantPrices-array wordt vervolgens doorgegeven aan de „For each“-lus, dieproductVariantsBulkUpdateaanroept om deze herberekende prijzen daadwerkelijk terug te schrijven naar het bundelproduct.
{
productVariant {
id
}
priceChange {
oldPrice { amount }
newPrice { amount }
}
getProductData1 {
id
variants {
id
productVariantComponents {
productVariant {
id
price
}
}
}
}
}export default function main(input) {
const changedVariantId = input.productVariant.id;
const newPrice = parseFloat(input.priceChange.newPrice.amount);
const variantPrices = input.getProductData1.flatMap(product =>
product.variants.map(variant => ({
productId: product.id,
id: variant.id,
price: variant.productVariantComponents.reduce((sum, component) => {
const p = component.productVariant.id === changedVariantId
? newPrice
: parseFloat(component.productVariant.price);
return sum + p;
}, 0)
}))
);
return { variantPrices };
}type VariantPrice {
productId: String!
id: String!
price: Float!
}
type Output {
variantPrices: [VariantPrice!]!
}- Voeg een „For each“-lus (iteratie) toe die elk item in
runCode1.variantPricesdoorloopt. Voor elke variantprijs voert deze de actie „Send Admin API“-verzoek uit met behulp van de mutatie**productVariantsBulkUpdate** om de prijs van de bundelvariant bij te werken. U kunt deze invoer voor de Mutatie gebruiken:
{
"variants": [
{
"id": "{{variantPricesForeachitem.id}}",
"price": "{{variantPricesForeachitem.price}}"
}
],
"productId": "{{variantPricesForeachitem.productId}}",
"allowPartialUpdates": true
}Hoe dit alles in zijn geheel functioneert
Wanneer de prijs van een variant van een product (bijvoorbeeld de variant ‘Grey T-Shirt S’) wordt gewijzigd (van € 10,00 naar € 15,00):
- De trigger „Prijswijziging productvariant“ wordt geactiveerd
- De Shopify Flow haalt de bovenliggende bundel van het product op met behulp van
productParents - De stap ‘Code uitvoeren’ haalt de product-ID van de bundel op
- Deze voorwaarde controleert of dit product deel uitmaakt van een bundel
- Zo ja, dan haalt het de productgegevens van de bundel op
- In een tweede stap van de code worden de prijzen van de bundelvarianten opnieuw berekend
- De lus doorloopt elke variant en werkt de bundelprijs bij via de ‘productVariantsBulkUpdate’-mutatie van de Admin API
De prijs van de ‘Bundle S’-variant zou nu worden aangepast van € 30,00 naar € 35,00 (€ 15,00 + € 10,00 + € 10,00).
