Preise von Produktbündeln bei Preisänderungen an Varianten automatisch synchronisieren
Shopify-Bundles werden automatisch aktualisiert, wenn sich der Preis einer Variante ändert, wobei die Funktion Shopify Flow verwendet wird.
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 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 Bundle-Preises bei einer Preisänderung einer Komponentenvariante
Stellen Sie sich vor, Sie hätten ein Produktpaket (z. B. ein T-Shirt-Paket), das mit der App „Shopify-Pakete“ erstellt wurde. Das Paket 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 Produktpaketvariante beträgt 30,00 € (die Summe aller Einzelproduktpreise). Wenn Sie den Preis einer Variante eines Einzelprodukts ändern, aktualisiert dieser Shopify Flow automatisch den entsprechenden Preis der Produktpaketvariante.
Aktivieren Sie diesen Trigger in den App-Einstellungen unter „Produktvarianten“ → „Preisänderungen bei Varianten“
Preisänderung bei einer Produktvariante
Rufen Sie das übergeordnete Bundle-Produkt ab, berechnen Sie die aktualisierten Variantenpreise und aktualisieren Sie die Preise der Bundle-Varianten in einem Schritt über die Admin-API
Videoanleitung
Die einzelnen Schritte können Sie auch in diesem Video anschaulich verfolgen (das Video ist ohne Ton; Sie können die Wiedergabegeschwindigkeit nach Bedarf anpassen).
Wie wir Shopify Flow einsetzen 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“ angelegt wurde. Es enthält drei gebündelte Produkte (schwarzes T-Shirt, graues T-Shirt, weißes T-Shirt) mit jeweils fünf 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 Zugriff fehlt.
- Erstellen Sie in der App Shopify Flow einen neuen leeren Workflow und wählen Sie den Trigger „Preisänderung bei Produktvariante“ 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 dem Erstellungsdatum 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, den JavaScript-Code und die 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 „Bedingung“-Schritt hinzu, der prüft, ob die Ausgabe des „Code ausführen“-Schritts
productIdnicht 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 Paketpreis weiterhin aktualisieren
- Falsch → Stopp (das Produkt ist kein Bestandteil eines Bundles)
- Wenn die Bedingung „Wahr“ ist, fügen Sie eine weitere Aktion „Produktdaten abrufen (1)“ hinzu, um die Varianten- und Preisdaten des übergeordneten Bundle-Produkts mithilfe der Funktion
idsConditionaus dem Schritt „Code ausführen“ abzurufen. - Fügen Sie einen zweiten Schritt „Code ausführen (1)“ hinzu, um die Preise der neuen Paketvarianten auf der Grundlage der aktualisierten Komponentenpreise zu berechnen. Dieser Schritt gibt ein Array vom Typ
variantPricesmit den neuen Preisen für jede Paketvariante aus.
In diesem Schritt „Code ausführen (1)“ werden die Preise der Paketvarianten auf der Grundlage des aktualisierten Komponentenpreises neu berechnet. Dabei wird Folgendes durchgeführt: Zunächst werden zwei wichtige Informationen aus dem Trigger abgerufen:
changedVariantIddie Variante, die soeben geändert wurde (...158920)newPriceden neuen Preis für diese Variante (11.00). Anschließend durchläuft das Programm jede Bundle-Variante 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? Falls ja, wirdnewPrice(11,00) anstelle des veralteten Preises verwendet, der noch unter Shopify (10,00) gespeichert ist. Falls nein, wird der bestehende Preiscomponent.productVariant.price.It verwendet. Anschließend werden die Preise der Komponenten addiert, um den neuen Preis der Paketvariante zu ermitteln. Sie können die Funktionsweise in Ihren Ausgabedaten nachvollziehen. Betrachten Sie die Variante...088840- zu ihren Komponenten gehört...158920(die geänderte Variante). Ihr Preis beträgt somit 11 + 10 + 10 = 31, während alle anderen Paketvarianten weiterhin insgesamt 30 ergeben, da sich bei keiner ihrer Komponenten etwas geändert hat.Dies ist die zentrale Erkenntnis dieses Schritts: Shopify hat den Komponentenpreis in den Bundle-Daten noch nicht aktualisiert, sodass der Code nicht einfach die bestehenden Preise addieren kann, sondern den neuen Preis für die geänderte Variante im laufenden Prozess ersetzen muss. Ohne diesen Schritt würden alle Varianten weiterhin 30 anzeigen. Das AusgabearrayvariantPriceswird anschließend in die „For 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) ein, die alle Elemente in
runCode1.variantPricesdurchläuft. Für jede Variante 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 zusammenwirkt
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
- Shopify Flow ruft das übergeordnete Bundle des Produkts mithilfe von
productParentsab. - Der Schritt „Code ausführen“ extrahiert die Produkt-ID des Produktpakets
- Die Bedingung prüft, ob dieses Produkt Teil eines Pakets ist
- Falls ja, ruft es die Produktdaten des Bundles ab
- In einem zweiten „Code ausführen“-Schritt werden die Preise der Paketvarianten neu berechnet
- Die Schleife durchläuft jede Variante und aktualisiert den Paketpreis mithilfe der Admin-API-Mutation „productVariantsBulkUpdate“.
Der Preis für die Variante „Bundle S“ würde sich nun von 30,00 € auf 35,00 € ändern (15,00 € + 10,00 € + 10,00 €).
