Varyant fiyat değişikliklerinde paket fiyatlarının otomatik olarak senkronize edilmesi
Shopify Flow'u kullanarak, bir bileşen varyantının fiyatı değiştiğinde Shopify Paketleri varyant fiyatlarını otomatik olarak güncelleyin.
Shopify Bundles uygulaması'ı kullanarak ürün paketleri oluşturduğunuzda, bir bileşen ürünün varyant fiyatını değiştirmek, paket ürünün varyant fiyatını otomatik olarak güncellemez. Workflow Trigger Extensions'daki Ürün Varyant Fiyatı Değişti tetikleyicisi, fiyat değişikliğini algılayarak paket varyant fiyatını otomatik olarak yeniden hesaplayıp güncelleyerek bu sorunu çözer.
Paket fiyatlarını senkronize tutmak için Ürün Varyantı Fiyatı Değişti tetikleyicisini nasıl kullanabileceğimizi anlamak amacıyla aşağıdaki senaryoyu ele alacağız.
Senaryo: Bir bileşen varyantının fiyatı değiştiğinde paket fiyatının otomatik olarak güncellenmesi
Shopify Bundles uygulamasıyla oluşturulmuş bir paket ürününüz olduğunu (örneğin, bir tişört paketi) hayal edin. Paket, her biri varyant başına 10,00 € fiyatlı üç bileşen üründen oluşuyor: Siyah Tişört, Gri Tişört ve Beyaz Tişört. Paket varyant fiyatı 30,00 €'dur (tüm bileşen fiyatlarının toplamı). Bir bileşen ürünün varyant fiyatını değiştirdiğinizde, bu akış ilgili paket varyant fiyatını otomatik olarak güncelleyecektir.
Uygulama ayarları -> Ürün Varyantları -> Varyant Fiyat Değişiklikleri bölümünden bu tetikleyiciyi etkinleştirin
Ürün Varyantının Fiyatı Değişti
Ana paket ürününü alın, güncellenmiş varyant fiyatlarını hesaplayın ve Yönetici API’si aracılığıyla paket varyant fiyatlarını toplu olarak güncelleyin
Video Kılavuzu
Bu videoda da adımları görsel olarak görebilirsiniz (videoda ses yoktur; videonun hızını ihtiyacınıza göre ayarlayabilirsiniz)
Bu süreci nasıl yürüteceğiz?
Kurulumun anlaşılması
- S, M, L, XL ve 2XL beden seçeneklerine sahip bir bileşen ürünümüz (örneğin Gri Tişört) var ve her birinin fiyatı 10,00 €'dur.
- **Shopify Bundles **uygulamasıyla oluşturulmuş bir paket ürünümüz var. Bu paket, her biri 5 varyant içeren 3 ürün (Siyah Tişört, Gri Tişört, Beyaz Tişört) içeriyor. Paket varyantının fiyatı 30,00 €'dur (bileşen fiyatlarının toplamı: 3 × 10,00 €).
Burada izlenen adımları görsel olarak görebilirsiniz:
- Workflow Trigger Extensions'da Triggers bölümünü açın, Price terimini arayın ve Product Variant Price Changed seçeneğini etkinleştirin. Bu özellik için "Product, Variant & Collection Data Access" yetkisi gereklidir; yetki eksikse uygulama bunu talep eder.
- Shopify Flow uygulamasından yeni bir boş iş akışı oluşturun ve **Workflow Trigger Extensions **uygulamasından Ürün Varyantı Fiyatı Değişti tetikleyicisini seçin
- Gelişmiş bir sorgu kullanarak, **oluşturulma tarihine **göre artan sırada sıralanmış şekilde değiştirilen ürünü almak için Ürün verilerini al eylemini ekleyin. Bu adım,
productParentsalanı aracılığıyla ürünün üst paket bilgilerini alır. Sorgu şu şekildedir:id:{{productVariant.product.id | split: "gid://shopify/Product/" | last}} getProductDatasonucundan üst paket ürün kimliğini çıkarmak için bir Kod Çalıştır adımı ekleyin. Bu kod,productParents'dan üst ürün kimliklerini çıkarır ve sorgulama için biridsConditiondizesi oluşturur.
Run code adımı, üst ürün kimliklerini elde etmek için aşağıdaki GraphQL girdisini, JavaScript kodunu ve çıktıları kullanır:
GraphQL girdisini, JavaScript kodunu ve önizleme çıktısını gösteren “Kodu Çalıştır” adımını çalıştır


{
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!
}productIdadlı “Kodu Çalıştır” çıktısının boş olup olmadığını ve mevcut olup olmadığını kontrol eden bir Koşul adımı ekleyin. Bu, yalnızca değiştirilen ürünün gerçekten bir paketin parçası olduğu durumlarda işlemlere devam etmemizi sağlar.- Doğru → paket fiyatını güncellemeye devam et
- Yanlış → durdur (ürün, paket bileşeni değildir)
- Koşul True ise, “Kod çalıştır” adımındaki
idsConditiondeğerini kullanarak üst paket ürünün varyant ve fiyat bilgilerini almak için bir başka Ürün verilerini al (1) eylemi ekleyin. - Güncellenen bileşen fiyatlarına göre yeni paket varyantlarının fiyatlarını hesaplamak için ikinci bir Kodu Çalıştır (1) adımı ekleyin. Bu adım, her bir paket varyantı için yeni fiyatları içeren bir
variantPricesdizisi oluşturur.
Bu Run code (1) adımı, güncellenen bileşen fiyatına göre paket varyantlarının fiyatlarını yeniden hesaplamaktadır. İşte ne yaptığı: Öncelikle, tetikleyiciden iki önemli bilgiyi alır:
changedVariantId: az önce değiştirilen varyant (...158920)newPrice, o varyantın yeni fiyatı (11.00). Ardından, her bir paket varyantını tek tek döngüye alarak toplam fiyatını yeniden hesaplar. Her paket varyantının 3 bileşen varyantı vardır (Siyah T-Shirt, Gri T-Shirt, Beyaz T-Shirt). Her bileşen için şu kontrolü yapar: Bu, az önce değişen varyant mı? Eğer evet ise, Shopify'da hala depolanan eski fiyat (10,00) yerinenewPrice(11,00) kullanılır. Eğer hayır ise, mevcutcomponent.productVariant.pricekullanılır. Bileşen fiyatlarını toplayarak yeni paket varyant fiyatını elde eder.**Çıktı verilerinizde bunun nasıl çalıştığını görebilirsiniz. **...088840numaralı varyanta bakın; bileşenleri arasında...158920(değişen varyant) bulunmaktadır. Dolayısıyla fiyatı 11 + 10 + 10 = 31 olurken, diğer tüm paket varyantlarının toplamı, bileşenlerinde herhangi bir değişiklik olmadığı için hâlâ 30'dur.Bu adımın temel noktası şudur: Shopify, paket verilerindeki bileşen fiyatını henüz güncellemedi; bu nedenle kod, mevcut fiyatları basitçe toplayamaz, değiştirilen varyantın fiyatını anında yeni fiyatla değiştirmek zorundadır. Bu yapılmazsa, tüm varyantlar hâlâ 30 olarak gösterilir. Çıktı olanvariantPricesdizisi daha sonra, yeniden hesaplanan bu fiyatları paket ürününe geri yazmak içinproductVariantsBulkUpdateişlevini çağıran**For each**döngüsüne aktarılır.
{
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!]!
}runCode1.variantPricesiçindeki her bir öğeyi döngüye sokan bir For each döngüsü (iterasyon) ekleyin. Her bir varyant fiyatı için, ürün varyantı fiyatını güncellemek üzere productVariantsBulkUpdate mutasyonunu kullanarak Send Admin API isteği eylemini gerçekleştirir. Bu girdiyi Mutasyon için kullanabilirsiniz:
{
"variants": [
{
"id": "{{variantPricesForeachitem.id}}",
"price": "{{variantPricesForeachitem.price}}"
}
],
"productId": "{{variantPricesForeachitem.productId}}",
"allowPartialUpdates": true
}Tüm bunlar birbiriyle nasıl uyum içinde çalışıyor?
Bir bileşen ürünün varyant fiyatı değiştiğinde (örneğin, “Gri T-Shirt S” varyantının fiyatını 10,00 €’dan 15,00 €’ya güncellediğinizde):
- Ürün Varyantı Fiyatı Değişti tetikleyicisi devreye girer
- Akış,
productParentskullanarak ürünün üst paketini alır - "Çalıştır kod" adımı, paket ürün kimliğini çıkarır
- Bu koşul, söz konusu ürünün bir paketin parçası olup olmadığını kontrol eder
- Eğer öyleyse, paket ürün verilerini alır
- İkinci bir “Kod Çalıştır” adımı, paket varyantlarının fiyatlarını yeniden hesaplar
- Döngü, her bir varyantı tek tek tarar ve productVariantsBulkUpdate Yönetici API mutasyonu aracılığıyla paket fiyatını günceller
S paketinin fiyatı artık 30,00 €'dan 35,00 €'ya (15,00 € + 10,00 € + 10,00 €) güncellenecektir.
