Preise von Bundles bei Preisänderungen an Varianten automatisch synchronisieren
Wenn Sie die App (Shopify) ** „Bundles“** zum Erstellen von Produktpaketen verwenden, wird der Variantenpreis des Paketprodukts nicht automatisch aktualisiert, wenn Sie den Variantenpreis eines Einzelprodukts ändern. Der Trigger **„Product Variant Price Changed“ (Variantenpreis **des Produkts geändert) von Workflow Trigger Extensions löst dieses Problem, indem er die Preisänderung erkennt und den Variantenpreis des Pakets automatisch neu berechnet und aktualisiert.
Wir gehen von folgendem Szenario aus, um zu verstehen, wie wir den Trigger „Preisänderung bei Produktvariante“ nutzen können, um die Preise von Produktpaketen synchron zu halten.
Szenario: Automatische Aktualisierung des Paketpreises bei einer Preisänderung einer Komponentenvariante
Stellen Sie sich vor, Sie haben ein Bundle-Produkt (z. B. ein T-Shirt-Bundle) mit der App „ShopifyBundles“ erstellt. Das Bundle enthält drei Einzelprodukte: ein schwarzes T-Shirt, ein graues T-Shirt und ein weißes T-Shirt, die jeweils 10,00 € pro Variante kosten. Der Preis der Bundle-Variante beträgt 30,00 € (die Summe aller Einzelproduktpreise). Wenn Sie den Preis einer Variante eines Einzelprodukts ändern, aktualisiert dieser Workflow automatisch den entsprechenden Preis der Bundle-Variante.
Aktivieren Sie diesen Trigger in den App-Einstellungen unter „Produktvarianten“ -> „Preisänderungen bei Varianten“.
Preisänderung bei einer Produktvariante
Das übergeordnete Bundle-Produkt abrufen, die aktualisierten Variantenpreise berechnen und die Preise der Bundle-Varianten über die Admin-API in einem Schritt aktualisieren
Video-Anleitung
Die einzelnen Schritte kannst du dir auch in diesem Video anschauen (das Video hat keinen Ton; du kannst die Wiedergabegeschwindigkeit nach Bedarf anpassen).
Wie wir das in die Wege leiten werden
Die Konfiguration verstehen
- Wir haben ein Produkt (z. B. ein graues T-Shirt) mit den Varianten S, M, L, XL und 2XL, die jeweils 10,00 € kosten.
- Wir haben ein Bundle-Produkt erstellt, das mit der App „Shopify-Bundles“ erstellt wurde. Es enthält 3 gebündelte Produkte (schwarzes T-Shirt, graues T-Shirt, weißes T-Shirt) mit jeweils 5 Varianten. Der Preis für die Bundle-Variante beträgt 30,00 € (Summe der Einzelpreise: 3 × 10,00 €).
Hier können Sie die einzelnen Schritte anschaulich nachvollziehen:
- Öffnen Sie in „Workflow Trigger Extensions“ den Bereich „Trigger“, suchen Sie nach „Preis“ und aktivieren Sie „Preisänderung bei Produktvariante“. Hierfür ist der Zugriff auf Produkt-, Varianten- und Kollektionsdaten erforderlich; die App fordert Sie dazu auf, falls dieser noch fehlt.
- Erstellen Sie in der App Shopify Flow einen neuen leeren Workflow und wählen Sie den Trigger „Product Variant Price Changed“ aus der App „Workflow Trigger Extensions“ aus.
- Fügen Sie die Aktion „Produktdaten abrufen“ hinzu, um das geänderte Produkt mithilfe einer erweiterten Abfrage abzurufen, sortiert nach „Erstellt am“ in aufsteigender Reihenfolge. In diesem Schritt werden die Informationen zum übergeordneten Bundle des Produkts über das Feld
productParentsabgerufen. Die Abfrage sieht wie folgt aus:id:{{productVariant.product.id | split: "gid://shopify/Product/" | last}} - Fügen Sie einen Schritt „Code ausführen“ hinzu, um die Produkt-ID des übergeordneten Bundles aus dem Ergebnis von
getProductDatazu extrahieren. Der Code extrahiert die Produkt-IDs der übergeordneten Produkte ausproductParentsund erstellt eine Zeichenfolge vom TypidsConditionfür die Abfrage.
Der Schritt „Code ausführen“ verwendet die folgenden GraphQL-Eingaben, JavaScript-Code und Ausgaben, um die IDs der übergeordneten Produkte abzurufen:
Schritt „Code ausführen“, der die GraphQL-Eingabe, den JavaScript-Code und die Vorschau der Ausgabe anzeigt


{
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!
}- Fügen Sie einen Schritt „Bedingung“ hinzu, der prüft, ob die Ausgabe des Schritts „Code ausführen“ (
productId) nicht leer ist und existiert. Dadurch wird sichergestellt, dass wir nur dann fortfahren, wenn das geänderte Produkt tatsächlich Teil eines Bundles ist. - Wahr → den Bundle-Preis weiterhin aktualisieren
- Falsch → Stopp (das Produkt ist kein Bestandteil eines Bundles)
- Wenn die Bedingung „True“ ist, fügen Sie eine weitere Aktion „Produktdaten abrufen (1)“ hinzu, um die Varianten- und Preisdaten des übergeordneten Bundle-Produkts mithilfe des
idsConditionaus dem Schritt „Code ausführen“ abzurufen. - Fügen Sie einen zweiten Schritt „Code ausführen (1)“ hinzu, um die Preise der neuen Bundle-Varianten auf der Grundlage der aktualisierten Komponentenpreise zu berechnen. Dieser Schritt gibt ein Array vom Typ
variantPricesmit den neuen Preisen für jede Bundle-Variante aus.
In diesem Schritt „Code ausführen (1)“ werden die Preise der Paketvarianten auf der Grundlage des aktualisierten Komponentenpreises neu berechnet. Und so funktioniert es: Zunächst werden zwei wichtige Informationen aus dem Auslöser abgerufen:
changedVariantIddie Variante, die gerade geändert wurde (...158920)newPriceden neuen Preis für diese Variante (11.00). Anschließend durchläuft das Skript alle Bundle-Varianten und berechnet deren Gesamtpreis neu. Jede Bundle-Variante besteht aus drei Komponentenvarianten (schwarzes T-Shirt, graues T-Shirt, weißes T-Shirt). Für jede Komponente wird geprüft: Handelt es sich um die Variante, die sich gerade geändert hat? Wenn ja, wirdnewPrice(11,00) anstelle des veralteten Preises verwendet, der noch unter Shopify (10,00) gespeichert ist. Wenn nein, wird der bestehende Preiscomponent.productVariant.price.It verwendet. Die Preise der Komponenten werden addiert, um den neuen Preis der Bundle-Variante zu erhalten. Sie können die Funktionsweise in Ihren Ausgabedaten sehen. Betrachten Sie die Variante...088840- zu ihren Komponenten gehört...158920(die geänderte Variante). Ihr Preis beträgt also 11 + 10 + 10 = 31, während alle anderen Paketvarianten weiterhin insgesamt 30 ergeben, da sich bei keiner ihrer Komponenten etwas geändert hat.Das ist die zentrale Erkenntnis dieses Schritts: Shopify hat den Preis der Komponente in den Paketdaten noch nicht aktualisiert, daher kann der Code nicht einfach die vorhandenen Preise addieren, sondern muss den neuen Preis für die geänderte Variante im laufenden Betrieb einfügen. Ohne diese Maßnahme würden alle Varianten weiterhin den Wert 30 anzeigen. Das AusgabearrayvariantPriceswird dann in dieFor each-Schleife eingespeist, dieproductVariantsBulkUpdateaufruft, um diese neu berechneten Preise tatsächlich wieder in das Bundle-Produkt zu schreiben.
{
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!]!
}- Fügen Sie eine „For each“-Schleife (Iteration) hinzu, die alle Elemente in
runCode1.variantPricesdurchläuft. Für jede Preisvariante führt sie die Aktion „Send Admin API Request“ unter Verwendung der Mutation „productVariantsBulkUpdate“ aus, um den Preis der Bundle-Variante zu aktualisieren. Sie können diese Eingabe für die Mutation verwenden:
{
"variants": [
{
"id": "{{variantPricesForeachitem.id}}",
"price": "{{variantPricesForeachitem.price}}"
}
],
"productId": "{{variantPricesForeachitem.productId}}",
"allowPartialUpdates": true
}Wie das alles zusammenhängt
Wenn sich der Preis einer Variante eines Produktes ändert (z. B. wenn Sie den Preis der Variante „Graues T-Shirt S“ von 10,00 € auf 15,00 € anpassen):
- Der Trigger „Preisänderung bei Produktvariante“ wird ausgelöst
- Der Ablauf ruft das übergeordnete Bundle des Produkts mithilfe von
productParentsab. - Der Schritt „Code ausführen“ extrahiert die Produkt-ID des Bundles
- Die Bedingung prüft, ob dieses Produkt Teil eines Pakets ist
- Falls ja, ruft es die Produktdaten des Bundles ab
- In einem zweiten „Run Code“-Schritt werden die Preise der Bundle-Varianten neu berechnet
- Die Schleife durchläuft jede Variante und aktualisiert den Bundle-Preis mithilfe der Admin-API-Mutation „productVariantsBulkUpdate“.
Der Preis für die Bundle-S-Variante würde sich nun von 30,00 € auf 35,00 € ändern (15,00 € + 10,00 € + 10,00 €).

