Preise von Produktbündeln bei Preisänderungen an Varianten automatisch synchronisieren

Preise von Produktbündeln bei Preisänderungen an Varianten automatisch synchronisieren

Seite kopieren

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 productParents abgerufen. 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 getProductData zu extrahieren. Der Code extrahiert die Produkt-IDs der übergeordneten Produkte aus productParents und erstellt eine Zeichenfolge vom Typ idsCondition fü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

Auf der Seite „Trigger“ wurde nach „Preis“ gesucht, wobei die Option „Preis der Produktvariante geändert“ aktiviert war
Suchen Sie in der App unter „Trigger“ nach „Preis“ und aktivieren Sie „Preisänderung bei Produktvariante“.
Der Variablenauswähler von Shopify Flow für „Preisänderung der Produktvariante“ mit den Feldern „alterPreis“, „neuerPreis“, „Differenz“, „prozentualeÄnderung“ und „Richtung“
Die Angabe „Preisänderung bei welcher Produktvariante“ liefert folgende Informationen: den Preis vor und nach der Änderung, die Differenz, den Prozentsatz und die Richtung.
bash
{
  getProductData {
    productParents {
      id
    }
  }
}
javascript
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,
  };
}
typescript
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 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 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 idsCondition aus 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 variantPrices mit 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:

  • changedVariantId die Variante, die soeben geändert wurde (...158920)
  • newPrice den 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, wird newPrice (11,00) anstelle des veralteten Preises verwendet, der noch unter Shopify (10,00) gespeichert ist. Falls nein, wird der bestehende Preis component.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 Ausgabearray variantPrices wird anschließend in die „For each“-Schleife eingespeist, die productVariantsBulkUpdate aufruft, um diese neu berechneten Preise tatsächlich wieder in das Bundle-Produkt zu schreiben.
bash
{
  productVariant {
    id
  }
  priceChange {
    oldPrice { amount }
    newPrice { amount }
  }
  getProductData1 {
    id
    variants {
      id
      productVariantComponents {
        productVariant {
          id
          price
        }
      }
    }
  }
}
javascript
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 };
}
yaml
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.variantPrices durchlä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:
json
{
  "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):

  1. Der Trigger „Preisänderung bei Produktvariante“ wird ausgelöst
  2. Shopify Flow ruft das übergeordnete Bundle des Produkts mithilfe von productParents ab.
  3. Der Schritt „Code ausführen“ extrahiert die Produkt-ID des Produktpakets
  4. Die Bedingung prüft, ob dieses Produkt Teil eines Pakets ist
  5. Falls ja, ruft es die Produktdaten des Bundles ab
  6. In einem zweiten „Code ausführen“-Schritt werden die Preise der Paketvarianten neu berechnet
  7. 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 €).