Sincronizzazione automatica dei prezzi dei pacchetti in caso di variazioni dei prezzi delle varianti
Aggiorna automaticamente il prezzo delle varianti dei pacchetti Shopify Bundles quando cambia il prezzo di una variante componente, con Shopify Flow.
Quando si utilizza l’app Shopify Bundles per creare pacchetti di prodotti, la modifica del prezzo di una variante di un prodotto componente non comporta l’aggiornamento automatico del prezzo della variante del pacchetto. Il trigger “Product Variant Price Changed” disponibile all’indirizzo Workflow Trigger Extensions risolve questo problema rilevando la variazione di prezzo e ricalcolando e aggiornando automaticamente il prezzo della variante del pacchetto.
Ipermetteremo il seguente scenario per comprendere in che modo è possibile utilizzare il trigger “Modifica del prezzo della variante del prodotto” per mantenere sincronizzati i prezzi dei pacchetti.
Scenario: Aggiornamento automatico del prezzo del pacchetto in caso di variazione del prezzo di una variante di un componente
Immagini di avere un prodotto in bundle (ad esempio, un bundle di magliette) creato con l’app “ShopifyBundles”. Il bundle contiene tre prodotti componenti: maglietta nera, maglietta grigia e maglietta bianca, ciascuno al prezzo di 10,00 € per variante. Il prezzo della variante del pacchetto è di 30,00 € (la somma dei prezzi di tutti i prodotti che lo compongono). Quando modifica il prezzo di una variante di un prodotto che compone il pacchetto, questo Shopify Flow aggiornerà automaticamente il prezzo della variante corrispondente del pacchetto.
Attivi questo trigger dalle impostazioni dell'app -> Varianti del prodotto -> Modifiche ai prezzi delle varianti
Modifica del prezzo di una variante del prodotto
Recuperare il prodotto principale del pacchetto, calcolare i prezzi aggiornati delle varianti e aggiornare in blocco i prezzi delle varianti del pacchetto tramite l’API di amministrazione
Guida video
Potete seguire visivamente i passaggi anche in questo video (il video è muto; potete regolare la velocità del video in base alle vostre esigenze)
Come intendiamo organizzare Shopify Flow per questo processo
Comprendere la configurazione
- Abbiamo un prodotto composto (ad esempio, una maglietta grigia) con le varianti S, M, L, XL, 2XL, ciascuna al prezzo di 10,00 €.
- Disponiamo di un prodotto in bundle creato con l’app “Shopify Bundles”. Esso contiene 3 prodotti in bundle (maglietta nera, maglietta grigia, maglietta bianca), ciascuno con 5 varianti. Il prezzo della variante del bundle è di 30,00 € (somma dei prezzi dei componenti: 3 × 10,00 €).
Qui potete vedere visivamente i passaggi seguiti:
- In "Workflow Trigger Extensions", apra la sezione "Trigger", cerchi "Prezzo" e attivi l’opzione "Modifica del prezzo della variante del prodotto". È necessario disporre dell’accesso ai dati relativi a prodotti, varianti e collezioni; l’app richiederà tale autorizzazione qualora non fosse presente.
- Creare un nuovo workflow vuoto dall’app Shopify Flow e selezionare il trigger “Variante del prodotto Price Changed” dall’app “Workflow Trigger Extensions”
- Aggiunga un'azione "Recupera dati prodotto" per recuperare il prodotto modificato utilizzando una query avanzata, ordinata in ordine crescente in base al campo "data di creazione". Questo passaggio recupera le informazioni relative al bundle padre del prodotto tramite il campo
productParents. La query è la seguente:id:{{productVariant.product.id | split: "gid://shopify/Product/" | last}} - Aggiunga un passaggio "Esegui codice" per estrarre l'ID del prodotto principale dal risultato di
getProductData. Il codice estrae gli ID dei prodotti principali daproductParentse genera una stringaidsConditionda utilizzare per l'interrogazione.
Il passaggio "Esegui codice" utilizza il seguente input GraphQL, il codice JavaScript e i risultati in uscita per ottenere gli ID dei prodotti principali:
Esecuzione del passaggio "Esegui codice" che mostra l'input GraphQL, il codice JavaScript e l'anteprima dell'output


{
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!
}- Aggiunga un passaggio "Condizione" che verifichi se l'output del codice "Esegui"
productIdnon sia vuoto ed esista effettivamente. Ciò garantisce che si proceda solo quando il prodotto modificato fa effettivamente parte di un pacchetto. - Vero → continuare ad aggiornare il prezzo del pacchetto
- Falso → interrompere (il prodotto non è un componente del pacchetto)
- Se la condizione è vera, aggiunga un’altra azione “Recupera dati prodotto (1)” per recuperare i dati relativi alle varianti e ai prezzi del prodotto bundle principale utilizzando l’
idsConditiondal passaggio “Esegui codice”. - Aggiunga un secondo passaggio "Esegui codice (1)" per calcolare i prezzi delle nuove varianti di pacchetto in base ai prezzi aggiornati dei componenti. Questo passaggio genera un array di tipo
variantPricescontenente i nuovi prezzi per ciascuna variante di pacchetto.
Questa fase del codice "Esegui" (1) ricalcola i prezzi delle varianti del pacchetto in base al prezzo aggiornato dei componenti. Ecco come funziona: innanzitutto, estrae due informazioni fondamentali dal trigger:
changedVariantIdle varianti che sono state appena modificate (...158920)newPriceil nuovo prezzo di quella variante (11.00). Successivamente, esegue un ciclo su ogni variante del pacchetto e ricalcola il relativo prezzo totale. Ogni variante del pacchetto comprende 3 varianti di componenti (maglietta nera, maglietta grigia, maglietta bianca). Per ogni componente, verifica: si tratta della variante appena modificata? In caso affermativo, utilizzanewPrice(11,00) anziché il prezzo obsoleto ancora memorizzato in Shopify (10,00). In caso negativo, utilizza il prezzo esistentecomponent.productVariant.price.It. Il sistema somma i prezzi dei componenti per ottenere il nuovo prezzo della variante del pacchetto. Potete osservarne il funzionamento nei vostri dati di output. Si osservi la variante...088840: i suoi componenti includono...158920(la variante modificata). Pertanto, il suo prezzo è 11 + 10 + 10 = 31, mentre tutte le altre varianti del pacchetto mantengono un totale di 30 poiché nessuno dei loro componenti è stato modificato.Questo è il concetto chiave di questa fase: Shopify non ha ancora aggiornato il prezzo del componente nei dati del pacchetto, pertanto il codice non può limitarsi a sommare i prezzi esistenti, ma deve sostituire al volo il prezzo della variante modificata con quello nuovo. Senza questa operazione, tutte le varianti continuerebbero a visualizzare il valore 30. L’array di outputvariantPricesviene quindi trasmesso al ciclo «For each», il quale richiama la funzioneproductVariantsBulkUpdateper riscrivere effettivamente questi prezzi ricalcolati nel prodotto in bundle.
{
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!]!
}- Aggiunga un ciclo “For each” (iterazione) che scorra tutti gli elementi presenti in
runCode1.variantPrices. Per ogni variante di prezzo, esegua l’azione “Invia richiesta API di amministrazione” utilizzando la mutazioneproductVariantsBulkUpdateper aggiornare il prezzo della variante del pacchetto. È possibile utilizzare questo input per la mutazione:
{
"variants": [
{
"id": "{{variantPricesForeachitem.id}}",
"price": "{{variantPricesForeachitem.price}}"
}
],
"productId": "{{variantPricesForeachitem.productId}}",
"allowPartialUpdates": true
}Come funziona il tutto nel suo insieme
Quando il prezzo di una variante di un prodotto (ad esempio, se aggiorna il prezzo della variante “S” della maglietta grigia da 10,00 € a 15,00 €):
- Si attiva il trigger “Modifica del prezzo della variante del prodotto”
- Shopify Flow recupera il bundle padre del prodotto utilizzando
productParents - La fase "Esegui codice" estrae l'ID del prodotto in bundle
- Questa condizione verifica se il prodotto in questione fa parte di un pacchetto
- In caso affermativo, recupera i dati relativi al pacchetto di prodotti
- Una seconda fase di esecuzione del codice ricalcola i prezzi delle varianti del pacchetto
- Il ciclo esegue un'iterazione su ciascuna variante e aggiorna il prezzo del pacchetto tramite la mutazione dell'API di amministrazione productVariantsBulkUpdate
Il prezzo della variante "Bundle S" verrebbe ora aggiornato da 30,00 € a 35,00 € (15,00 € + 10,00 € + 10,00 €).
