WooCommerce'te altın fiyatına bağlı otomatik fiyatlandırma nasıl kurulur?
- Konu
- E-ticaret
- Yazar
- SayLabs Ekibi
- Tarih
- Okuma süresi
- 5 dk
Altın ürün satan bir mağazada fiyat sabit bir sayı değildir. Gram altın gün içinde defalarca değişir ve elle güncellenen bir katalog ya zarar ettirir ya da müşteriyi kaçırır. Çözüm, ürün fiyatını formüle bağlamak: altının anlık fiyatı, ürünün gramı, ayarı ve işçilik. Kulağa basit geliyor; zor olan kısım verinin yanlış geldiği, kaynağın düştüğü veya fiyatın müşteri sepetteyken değiştiği anlar. Bu yazı WooCommerce mağazaları için bu kurgunun nasıl kurulacağını ve nerelerde kırıldığını anlatıyor.
Fiyat formülü: gram, ayar, işçilik
Ürün fiyatını belirleyen değişkenler ürüne aittir, altın fiyatı ise mağazaya. Bu ayrımı veri modeline baştan yansıtın: her ürün kendi gramını, ayarını ve işçilik tanımını taşır; altın fiyatı tek bir yerde durur ve tüm ürünler oradan okur.
- Gram: ürünün net altın ağırlığı. Taş veya alaşım dışı parçalar varsa toplam ağırlıktan ayrı tutulmalı.
- Ayar: saflık oranı. 22 ayar için 0,916, 18 ayar için 0,750, 14 ayar için 0,585 gibi milyem değerleri kullanılır. Ayarı metin olarak değil, oran olarak saklayın.
- İşçilik: sektörde gram başına ek tutar ya da yüzde olarak tanımlanır. Hangisini kullandığınızı ürün bazında seçilebilir bırakın; iki yöntem de yaygın.
- Sabit ek maliyetler: taş, kutu, sertifika gibi altına bağlı olmayan kalemler. Bunlar formülün dışında, ayrı bir alan olarak eklenmeli.
Hesabı tek bir fonksiyonda toplayın ve hem ürün sayfası hem sepet hem de toplu güncelleme aynı fonksiyonu çağırsın. Formülün üç ayrı yerde yazıldığı mağazalarda ürün sayfası ile sepet arasında kuruş farkları çıkması kaçınılmazdır.
<?php
// Tek hesap noktası: ürün sayfası, sepet ve toplu güncelleme bunu kullanır.
function altin_urun_fiyati(float $gramFiyat, float $gram, float $milyem, array $iscilik, float $sabitEk = 0.0): float
{
$altinBedeli = $gramFiyat * $gram * $milyem;
$iscilikBedeli = $iscilik['tip'] === 'yuzde'
? $altinBedeli * ($iscilik['deger'] / 100)
: $gram * $iscilik['deger']; // gram başına sabit tutar
// Para hesabında yuvarlama tek seferde ve en sonda yapılır
return round($altinBedeli + $iscilikBedeli + $sabitEk, 2);
}Veri kaynağı: tek kaynağa güvenmeyin
Altın fiyatını bir dış servisten alırsınız ve o servis bir gün yanlış değer döndürür, geç cevap verir ya da hiç cevap vermez. Mağazanın bütün kataloğu bu tek sayıya bağlı olduğu için kaynak seçimi teknik bir detay değil, doğrudan gelir riskidir.
Altın Fiyat Çevirici API projemizde bu yüzden fiyatı birden fazla kaynaktan çeken PHP tabanlı bir sistem kurduk. Ürün fiyatları bu veriye göre otomatik hesaplanıyor ve sistem diğer uygulamaların kullanabilmesi için RESTful bir API olarak sunuluyor. Mağaza tarafı fiyatın nereden geldiğini bilmek zorunda kalmıyor; yalnızca tek bir uç noktadan güncel değeri okuyor.
Güncelleme sıklığı ve önbellek
"Gerçek zamanlı" kulağa iyi gelir ama her sayfa görüntülemesinde dış servise istek atmak hem yavaştır hem de servis limitlerine takılır. Doğru soru şu: fiyat ne sıklıkla güncellenirse işletme için yeterli? Bu, ürünün marjına ve piyasanın o günkü oynaklığına bağlıdır.
Bizim sistemimizde güncelleme aralığı yönetim panelinden seçilebiliyor: 15 dakika, 30 dakika, 1 saat, 2 saat veya 4 saat. Düşük marjlı ürünlerde kısa aralık, işçiliği yüksek ürünlerde daha uzun aralık makul bir başlangıç. Aralığı koda gömmek yerine panelde bırakmak, piyasa hareketli olduğu günlerde dağıtım yapmadan sıklığı artırmayı mümkün kılıyor.
WooCommerce tarafında iki yol var. Birincisi fiyatı her istekte woocommerce_product_get_price gibi filtrelerle anlık hesaplamak; ikincisi zamanlanmış bir işle ürünlerin kayıtlı fiyatını toplu güncellemek. İkincisi genelde daha sağlıklıdır: sayfa önbelleği, ürün feed'leri ve pazaryeri entegrasyonları kayıtlı fiyatı okur, filtreyle üretilen fiyatı görmez. Toplu güncellemeyi WP-Cron'a bırakmayın; WP-Cron ancak siteye ziyaretçi geldiğinde tetiklenir. Sunucu tarafında gerçek bir cron tanımlayın.
Fiyat sıçramaları ve hatalı veri
En tehlikeli senaryo kaynağın düşmesi değil, yanlış ama makul görünen bir değer döndürmesidir. Bir ondalık kayması ya da birim karışıklığı (ons ile gram, dolar ile lira) bütün kataloğu bir anda yarı fiyatına indirebilir. Bu yüzden gelen her değer, ürünlere uygulanmadan önce bir eşikten geçmeli.
- Son kabul edilen değerle karşılaştırın. Belirlediğiniz yüzdeden büyük bir değişim varsa değeri otomatik uygulamayın, beklemeye alın.
- Kaynakları birbiriyle karşılaştırın. Kaynaklar arasındaki fark makul aralığın dışındaysa hangisinin doğru olduğuna sistem değil, insan karar vermeli.
- Her değeri zaman damgasıyla saklayın. Fiyat geçmişi olmadan bir müşterinin "dün bu ürün daha ucuzdu" şikâyetini doğrulayamazsınız.
- Eşik aşıldığında bildirim gönderin. Sessizce reddedilen bir güncelleme, saatlerce eski fiyattan satış yapılması demektir.
Altın Fiyat Çevirici API'de fiyat geçmişi tutuluyor, önemli fiyat değişikliklerinde e-posta bildirimi gidiyor ve tüm akış bir yönetim panelinden izlenebiliyor. Eşiğin kendisi her işletmede farklıdır; önemli olan eşiğin var olması ve aşıldığında birinin haberdar olmasıdır.
Sepetteki fiyat ne zaman sabitlenmeli?
WooCommerce sepetteki ürünlerin fiyatını varsayılan olarak her sayfa yüklemesinde üründen yeniden okur. Yani müşteri ürünü sepete eklediğinde gördüğü fiyat, ödeme sayfasına geldiğinde değişmiş olabilir. Bu hem hukuki hem de güven açısından sorun yaratır: müşteri ödeme anında farklı bir tutarla karşılaşırsa genelde satın almadan vazgeçer.
Yaygın çözüm, sepete ekleme anındaki fiyatı sepet öğesinin verisine yazmak (woocommerce_add_cart_item_data) ve toplamlar hesaplanırken bu değeri kullanmaktır (woocommerce_before_calculate_totals). Ancak fiyatı süresiz sabitlemek de risklidir: altın yükselirken eski fiyatı tutan bir sepet, açık bırakılan bir zarar pozisyonudur.
- Sabitlenen fiyata bir geçerlilik süresi verin ve bu süreyi sepette açıkça gösterin.
- Süre dolduğunda fiyatı sessizce değiştirmeyin; müşteriye yeni fiyatı ve değişimin nedenini gösterin.
- Sipariş oluştuğu anda kullanılan altın fiyatını ve hesap kalemlerini sipariş kaydına yazın. İade ve muhasebe bu bilgiye ihtiyaç duyar.
Kaynak düşerse ne olur?
Bu sorunun cevabı kurulumdan önce verilmeli, kriz anında değil. Üç seçenek var ve hiçbiri her işletme için doğru değil.
Son geçerli fiyatla devam etmek
En yaygın davranış. Kısa kesintilerde mantıklıdır, uzun kesintilerde risklidir. Son değerin ne kadar eski olabileceğine bir üst sınır koyun; bu sınır aşıldığında bir sonraki seçeneğe geçin.
Satışı geçici olarak durdurmak
Altına bağlı ürünleri "fiyat güncelleniyor" durumuna almak veya sepete eklemeyi kapatmak. Gelir kaybı görünür ama yanlış fiyattan satış riski sıfırlanır.
Elle fiyat girişine izin vermek
Yönetim panelinden altın fiyatının elle girilebilmesi. Kesinti uzadığında işletmenin kendi kararıyla satışa devam etmesini sağlar. Elle girilen değerin de aynı eşik kontrolünden geçmesi ve kayda geçmesi gerekir.
Kurulum öncesi kontrol listesi
- Formül tek bir fonksiyonda mı ve ürün sayfası, sepet, toplu güncelleme aynı fonksiyonu mu kullanıyor?
- Ürün verisinde gram, ayar (oran olarak), işçilik tipi ve sabit ek maliyet ayrı alanlarda mı?
- Birden fazla fiyat kaynağı var mı ve mağaza bunlara doğrudan değil, ara bir katman üzerinden mi bağlanıyor?
- Güncelleme aralığı panelden değiştirilebiliyor mu ve toplu güncelleme gerçek bir sunucu cron'u ile mi çalışıyor?
- Ani değişim eşiği tanımlı mı ve eşik aşıldığında bildirim gidiyor mu?
- Sepet fiyatı sabitleniyor mu, sabitlemenin süresi müşteriye gösteriliyor mu?
- Sipariş kaydında o anki altın fiyatı ve hesap kalemleri saklanıyor mu?
- Kaynak düştüğünde hangi davranışın devreye gireceği yazılı olarak belirlendi mi?
Bu listenin son maddesi teknik değil, işletme kararıdır. Yazılım her üç davranışı da destekleyebilir; hangisinin seçileceğini mağaza sahibinin marjı ve risk iştahı belirler. Bu kararı kod yazılmadan önce vermek, kesinti gecesi verilmesinden çok daha ucuzdur.
- #woocommerce
- #altın fiyatı
- #kuyumcu e-ticaret
- #dinamik fiyatlandırma