Erhan Yakut Software Developer @Binalyze | Founder @Passwall | Golang Enthusiast | Open Sorcerer

WooCommerce Sepete İki Defa Ürün Eklenmesi Sorunu

2 min read

woocommerce banner

Yazılım geliştirme sürecinde sürekli yeni problemlerle karşılaşırız. En çok kendimizi geliştirdiğimiz anlar da bu problemlerle karşılaştığımız anlardır çünkü sorunu aşmak için araştırmaya başlar ve bu araştırma esnasında birçok yeni bilgi ekleriz haznemize. Geçtiğimiz günlerde karşılaştığım sayfanın iki defa yüklenmesi sorunu da benim için bu durumlardan birisiydi.

Problemin Tespit Edilmesi

Üzerinde çalışırken yukarıda bahsettiğim sorunla karşılaştığım proje, PHP ile özgün bir şekilde yazılmış bir altyapının WordPress’e aktarılması yani WordPress entegrasyonu ile ilgiliydi. Aktarmada bir sıkıntı yoktu ancak her nedense alışveriş sistemi için kullandığım WooCommerce doğru bir şekilde çalışmıyordu. Tam olarak belirtmek gerekirse herhangi bir ürünü sepete eklemek istediğimde ürün iki defa ekleniyordu. Yapmış olduğum araştırmada bu problemin WooCommerce‘in bilinen problemlerden olduğunu gördüm. Eklentinin resmi sitesinde şöyle bir açıklama vardı.

Double add to cart issues: Check your page source for empty background-image (css) properties, or img and link tags with empty src/href attributes. These can cause pages to load multiple times.

Diyor ki sitede (css ve js dosyaları dahil) herhangi bir img veya link etiketi boş değer döndürüyorsa yani etiketteki görsele/linke ulaşılamıyorsa site iki kez yüklenebilir. Böyle durumlarda sepete ürün iki defa eklenebilir.

Problemin Teşhis Edilmesi

Problemi teşhis etmek ve yukarıda belirtilen açıklamanın benim projem için geçerli olup olmadığını anlamak için sitenin iki defa yüklenip yüklenmediğini netleştirmem gerekiyordu. Bunun için de PHP’deki oturum (session) özelliğinden yararlanmaya karar verdim. Mantık basitti. Kullanıcı siteye geldiğinde bir anahtar değer belirleyerek değerini 1 yaptım. Eğer söz konusu session değişkeni zaten oluşturulmuş ise değeri 1 artır dedim. Tabi bir de projenin WordPress olduğunu ve WordPress’te sessionların kullanılmadığını unutmamak lazım. Bu yüzden önce sessionları aktif hale getirmem gerekiyordu. Bunun için wp-config.php dosyasında require_once(ABSPATH . ‘wp-settings.php’); satırından hemen önce şu satırı ekledim.

if (!session_id()) session_start();

Bundan sonra rahatlıkla session kullanmaya başlayabildim. Ardından kullandığım temanın uygun bir yerinde şu kod ile sitenin kaç defa görüntülendiğini inceledim.

Sonra siteyi bir kaç defa yenilediğimde ekrana yazılan sayının 1-3-5-7 şeklinde arttığını gördüm. Demek ki site iki defa yükleniyordu. Artık problemi teşhis ettiğime göre çözüm aşamasına yani bu iki defa yüklemeye neyin sebep olduğunu bulmaya geçebilirdim.

Problemin Çözülmesi

Sorunun hangi dosyadan kaynaklandığını anlamak için öncelikle tüm css ve javascript dosyalarını kaldırıp tek tek aktif hale getirdim ve her yeni aktifleştirdiğim css/js dosyası sonrasında sorunun düzelip düzelmediğine baktım. Sonuç olarak bir css ve bir javascript dosyasında bulunan ve boş sonuç döndüren iki dosya yolunu belirledim ve düzelttim.

Sonuç

Dosya yollarını düzelttikten sonra artık sepetim düzgün çalışmaya başlamıştı :) Benim karşılaştığım bu sorunla karşılaşabilecek başka geliştiricilere kolaylık olması açısından tecrübemi paylaştım. Umarım siz çok daha kısa sürede alışveriş sepetinizi doğru bir şekilde çalışır hale getirirsiniz ;)

Erhan Yakut Software Developer @Binalyze | Founder @Passwall | Golang Enthusiast | Open Sorcerer