v2.5.2
Giriş yap

WooCommerce Varyantlı Entegrasyon Problemi

mcfearcombat
158 defa görüntülendi

Merhabalar,

WooCommerce ile oluturduğumuz bir sitemiz mevcut ve birde web tabanlı stok takip sistemimiz mevcut. İkisi arasında bir entegrasyon yapıyoruz ancak ürünlerimizin hepsi varyantlı olduğu için bazı problemler yaşamaktayız.Anlatımımı daha net anlaşılması için örnekler üzerinden yapacağım.

Ürünümüz örneğin atlet, biz bu atlet ürününü varyasyonlu şekilde woocommerce üzerinden oluşturuyoruz. S,M,L,XL bedenlerini varyant olarak kaydediyoruz ve temsili 333 TL olarak fiyat giriyoruz. Bu varyantları girerkende ürün SKU'sunu stok takip sistemimizdeki ile aynı SKU olarak giriyoruz.

Bildiğiniz üzere woocommerce veritabanında hem ana ürün için bir ID oluşturuyor hem de alt varyantlar için bir ID oluturuyor.

Örneğin;

Ana ürün : 1001
S Beden : 1002
M Beden : 1003
L Beden : 1004
XL Beden : 1005 ID'leri olduğunu farz edelim. Biz stok takip sistemimizden ürün stokkodu, fiyat ve stok miktarını barındıran bir XML yayınlıyoruz.

Daha sonra woocommerce sitemizde bir php kod çalıştırarak xml'i okuyup sırayla wp_postmeta ve wp_wc_product_meta_lookup tablolarında arama yapıp ürünün woocommerce'deki ID'sini öğrenip gene bu tablolardaki ilgili ürün ID'sindeki fiyat, stok bilgilerini güncelliyoruz.

Buraya kadar varyantların stok miktarı ve fiyatını güncellemekte hiçbir sorunumuz bulunmuyor. Ancak ana ürünü güncelleyemiyoruz yani verdiğim örnek üzerinden anlatacak olursak;

1002,1003,1004,1005 ID 'li varyantların fiyat ve stoğu güncelleniyor, kullanıcı bu varyantı seçip sepete eklediğinde ilgili fiyat zaten gözüküyor, ancak site anasayfasında ya da ürün sayfasında herhangi bir alt varyant seçmemişse ilk seferde girdiğimiz farazi fiyat olan 333 TL gözüküyor.

Not : ürünleri eklerken varsayılan varyant seçsekte bu şekilde oluyor. Eklenti ile en düşük olan varyantı ana ürün kabul et desekte genede 333 TL'nin gzükmesine engel olmaıyoruz.

Ürünü düzenlemeye girip bir değiiklik yapıp güncellediğimizde WC otamatik olarak en düşük varyantın fiyatını alıyor.

WooCommerce entegrasyon ya da WC ile detaylı uğraşan üstadlar konu hakkında fikir verebilir sorunumuzun çözümü için yardımcı olabilirse çok sevinirim.

İyi çalışmalar saygılarımla.

mcfearcombat
241 gün önce

Sorunumu çözebildim, araştırmalarım nihayetinde woocommerce'nin ana ürün ve varyant fiyatlarının wp_options tablosunda önbellekleme niteliğinde tuttuğunu ve buradaki satırın güncellenmesinin sadece ürünün panel üzerinden güncellenmesi ve yeni kayıt oluşturduğunda yapıldığını tespit ettim. Ben ise varyant stok ve fiyat bilgilerini entegrasyonum ile direkt veritabanı üzerinden değiştirdiğim için bu güncellemeyi yapmıyordu.

WooCommerce'de bulunan wc_delete_product_transients() fonksiyonu bu önbelleklemeyi güncelliyormuş. Buna istinaden aşağıdaki kod yardımıyla ürün stok ve fiyat bilgilerimi gncelledikten sonra fonksiyonu çağırıp sorunumu çözmüş oldum. Benzer sorun yaşayacaklar için kodu bıraya bırakmaktayım.

<?php

require_once('../wp-load.php');


$args = array(
    'post_type'      => 'product',
    'post_status'    => 'publish',
    'posts_per_page' => -1,
    'post_parent'    => 0, // Sadece ana ürünleri almak için post_parent'ı 0 olarak ayarlayın
);

$products = get_posts( $args );

foreach ( $products as $product ) {
 
    wc_delete_product_transients( $product->ID );
}

echo "Tüm ana ürünlerin fiyatları başarıyla güncellendi.";
?>