Yoast.com'un web mağazasını EDD'den WooCommerce'e taşıma

Yayınlanan: 2018-02-27

Yoast'ta web sitelerinin performansını her açıdan optimize ediyoruz. Amacımız, web sitelerini daha kullanışlı, gezinmesi daha kolay, daha hızlı ve daha güvenilir hale getirerek web'i daha iyi bir yer haline getirmektir.

Eylül 2017'de web mağazamızı Easy Digital Downloads'tan (EDD) WooCommerce'e taşıdık - yoast.com'da bulunan tüm araçları, ürünleri ve içeriği burada satıyoruz. Bu yazıda bunu neden yaptığımızı, neyi inşa ettiğimizi ve gelecekte bizim ve kullanıcılarımız için faydalarının neler olacağını açıklayacağım. WooCommerce, bize gelecek yıllarda üzerine inşa edeceğimiz teknik temeli sağladı.

Neden değişiklik?

Yoast.com, iki ana bileşen tarafından yönlendirilen inanılmaz bir büyüme yaşıyor - eklentimizin popülaritesi ve SEO blogumuzun genişleyen kitlesi. Ancak bu iki unsurun birleşimi, yoast.com'u yönetilmesi zor bir web sitesi haline getiriyor.

Tarihsel olarak, site basit bir WordPress kurulumundan gelişmiştir. Kolay Dijital İndirmeler (EDD), premium eklentilerin satışını kolaylaştırmak için Yoast'ın kurucusu Joost de Valk tarafından eklendi. Ayrıca dünyadaki tüm Premium kurulumlar için güncellemeler sunmak için EDD'yi kullandık.

Yıllar içinde, EDD'nin hala ihtiyaçlarımızı karşılayabildiğinden emin olmak için daha fazla ince ayar yaptık. Örneğin, müşterilerimizin euro veya dolar cinsinden ödeme yapmasını mümkün kılmak çok büyük bir çabaydı. İleride başka para birimleri eklemek istediğimiz için farklı bir çözüm bulmamız gerekiyordu.

Diğer seçeneklere baktığımızda birkaç ihtiyacı düşündük:

  • Çoklu para birimi alımlarını destekleyebilme.
  • Yinelenen ödemeleri destekleyebilme.
  • Entegrasyon oluşturma maliyeti ve platformun sürdürülebilirliği.
  • Kullanıcı hesaplarını destekleyebilme.
  • SEO platformu oluşturma.
  • 5-10 yıl sonra hala çalışacak bir siteye sahip olmak istediğimizden, gelecekteki uyumluluğu dikkate alarak.

Yukarıdakilerin hepsini başarmak için bir plan bulmamız gerekiyordu.

fikir

Ocak 2017'de mimarlardan oluşan ekibimizle bir toplantı planladık: Joost, Omar, Jip ve ben. İhtiyaçlarımızın neler olduğunu ve bunları en iyi nasıl karşılayabileceğimizi tartıştık.

İlk sonucumuz, WordPress'ten uzaklaşmak istemediğimizdi. Artık diğer platformlar için eklentilerimiz olsa da, WordPress hayranlarıyız ve misyonunu çok önemsiyoruz. WordPress, köklerimizin olduğu yerdir ve bir CMS olarak bizim için çok iyi çalıştı.

Neden WooCommerce?

Daha sonra hangi e-ticaret platformunu kullanmak istediğimizi düşündük. WordPress için en iyi e-ticaret çözümünün ne olduğunu kendimize sorduk ve bunun WooCommerce olduğu sonucuna vardık. Ancak, EDD gibi WooCommerce de birden fazla para birimini desteklemiyordu. Bu yüzden bir çözüme ihtiyacımız vardı.

Her şeyin bir remix olduğu fikrinin büyük bir hayranıyım. MultilingualPress eklentisi tarafından iyi yürütülen bir fikir olan her dil için farklı bir site kullanma fikrinden ilham aldık. Bu yüzden yeniden düzenledik: Bir ton özel kod yazmak zorunda kalmamak için çok bölgeli bir kurulum kullanmaya karar verdik.

Sonuç olarak, WooCommerce'in farklı para birimlerini yönetmesi gerekmez. Dolar sitesinde, WooCommerce her şeyi dolar cinsinden yapar. Euro sitesinde, WooCommerce her şeyi Euro cinsinden yapar. Bu aynı zamanda yeni bir para birimi eklemeyi nispeten kolaylaştırır. Sadece yeni bir site ekler ve ayarları kopyalarız. MultilingualPress ile birlikte gelecekte bu, farklı dilleri desteklememizi de mümkün kılacaktır.

yoast.com USD ve AB
yoast.com, kullanıcılara switcher aracılığıyla ABD doları ve euro arasında bir seçim sunuyor.

WooCommerce, birkaç nedenden dolayı yoast.com için mükemmel bir seçim oldu:

  • İyi bir veri modeli.
  • Büyük bir ekosistem.
  • Yerleşik REST API ve Webhook desteği.
  • Eklentimizi WooCommerce ile birlikte test etme imkanı.
  • WooCommerce, e-Ticaret alanını çözer. E-Ticaret alanında çalışmak için fazla zaman harcamak istemedik. SEO bizim uzmanlığımızdır, bu yüzden SEO'ya odaklanmak istiyoruz.
  • WooCommerce, katılabileceğimiz canlı bir topluluğa sahiptir.

e-Ticaret: SKU'lar, geçmiş kayıtlar ve geri ödemeler

Bir an için e-ticaret alanına odaklanmak istiyorum. Burada dikkate alınması gereken bir husus SKU'dur. Her ürünün bir SKU'su vardır - benzersiz bir tanımlayıcı. Bir SKU kulağa gereksiz bir şey gibi gelebilir. Veritabanında bir kimliğim varken neden bir SKU'ya ihtiyacım var? Ama sonra, her şirketin her finans departmanının zaten bu sisteme sahip olduğunu fark ediyorsunuz. SKU'lar otomatik olarak artırılmaz - ürünleri net bir şekilde takip etmenin bir yoluna ihtiyacınız var. İsimler buna uygun değil. Dolayısıyla, yoast.com'da SKU artık finans departmanımızın ürünleri izlemek için kullandığı numaradır.

Diğer bir gereklilik, her satın alma işleminin tarihsel bir kaydına sahip olmaktı. WooCommerce bunu varsayılan olarak yapar. Bir sipariş tamamlandığında, bu kadar. Tüm veriler değişmez. Bir müşteri adını, adresini veya e-posta adresini değiştirirse, yeni bilgiler yalnızca yeni siparişler için kullanılır. Bir geliştirici için bu garip gelebilir, ancak aslında bir güçtür. Gerçekleştikten sonra bankanızın işlemleri değiştirmesini de istemezsiniz - bir kez yapıldıktan sonra yapılır. Herhangi bir mutasyon yeni bir işlemdir.

Tarihsel bir rekora sahip olmak, geri ödemeler söz konusu olduğunda en büyük farkı yaratır. Eski kurulumda, iade edilen siparişler ihracatımızdan kaybolacaktı ve bu da o ayın gelirini değiştirecekti. WooCommerce'de her geri ödemenin kendi tarihi ve tutarı vardır. Yani ayda bir yapılır, gerçekten yapılır.

WooCommerce'de her geri ödemenin kendi tarihi ve tutarı vardır. Yani ayda bir yapılır, gerçekten yapılır.

Yoast.com'u WooCommerce'e taşımanın teknik ayrıntıları

Göç

Çok sayıda geçmiş veriye sahibiz, bu da çok sayıda siparişi taşımamız gerektiği anlamına geliyordu. Pandalar adlı bir araç seçtik, büyük veri kümelerini işlemek için tasarlanmış bir araç ve hepsini aynı anda taşımak için iyi bir seçim. Başka bir geçiş planlasaydık, muhtemelen farklı bir yöne giderdik - geçmiş verileri aylar içinde yavaş yavaş biçimlendirirdik. Bu, fiili hareket gününde taşınacak veri miktarını büyük ölçüde azaltacaktır.

Süreci olması gerekenden daha karmaşık hale getiren bir ana acı noktası vardı. Tüm veriler veritabanında tek bir meta değere kaydedildiğinden, serileştirilmemesi gerekiyordu. Python'un PHP'yi seri hale getirmenin verimli ve doğru bir yolu yok, bu yüzden bu verileri seri hale getirebilmek için PHP'ye saldırdık.

verileri toplama

Artık iki sitemiz olduğunu fark etmişsinizdir. Ancak yine de tüm verilere tek bir yerde genel bir bakış sağlamak istiyoruz. MyYoast'ı kurmamızın nedenlerinden biri de budur. Aldığımız tüm siparişler MyYoast ile senkronize edilir. Bu, MyYoast'ın her şeyi bildiği anlamına gelir.

WooCommerce, tüm siparişleri senkronize etmek için bir sisteme sahiptir: web kancaları. Genel olarak web kancalarının en büyük dezavantajı, alıcı sistem kapalıysa web kancasının alınmamasıdır. Web kancalarının koduna bakarken aşağıdaki parçacığı bulursunuz:

“`
/*
* Diğer eklentilerin, tavşan/zeromq gibi bazı ileti kuyruğu için teslime müdahale etmesine izin verin
*/
return application_filters('woocommerce_webhook_should_deliver', $should_deliver, $bu, $arg );
“`

Yorumda önerildiği gibi bir mesaj kuyruğu kullanmayı düşündük, ancak daha basit bir yaklaşımla gittik.

Ruby on Rails topluluğundan bir delay_job projesi var. İhtiyaçlarımıza uygun bir PHP bağlantı noktası bulduk. Gecikmeli iş, adından da anlaşılacağı gibi yapar: daha sonra yürütülecek bir işi planlar. Bu, bir işin asla kaybedilemeyeceği anlamına gelir. Ve iş başarısız olursa, dört kez daha denenecek. Bundan sonra, iş neyin yanlış gittiğini ayıklamak için kullanılabilir. Bu bize gerçekten sağlam bir kurulum sağlar.

Webhookİşler

WooCommerce'i özel kukla URL'mize web kancaları göndermeye çalışacak şekilde yapılandırdık: `http://my-yoast-job.url`. Bu, bu istekleri koddan yakalayabilmemizi sağlar. İşleri planlamaktan sorumlu olan bir 'Scheduler' sınıfımız var. Web kancası isteklerini yakalar ve yerine işlere dönüştürür.

İşSınıfları

Yoast.com'un temel yapı taşlarının her biri için bir tane olmak üzere, işleri ele alan birkaç sınıfımız var. İşler daha sonra arka planda bir işçi tarafından gerçekleştirilir. Bu süreç hızlıdır, bu nedenle bir müşteri ürünlerini MyYoast'ta anında görebilir.

Bir uygulama olarak WordPress

On İki Faktör Uygulamasını hiç okumadıysanız, okumanızı şiddetle tavsiye ederim. Web uygulaması geliştirme için çok sağlam bir çerçeve önerir. Bu, bir WordPress bağlamına nasıl çevrilir? Düşündüğünden daha iyi.

WordPress, kurulumu zorlaştıran birkaç benzersiz özelliğe sahiptir. Ancak sağlam bir WordPress kurulumu elde etmek için bunların etrafında çalışabilirsiniz. Bunlardan yalnızca birini yaparsanız, bağımlılık faktörü olmalıdır. Composer'ı kullanmaya başlayın! O burada ve işe yarıyor. Rarst, WordPress geliştirme için Composer'ın nasıl kullanılacağına dair iyi bir genel bakış oluşturdu. Otomatik güncelleme, karmaşık bir web uygulaması için bir seçenek değildir. Yani farklı bir çözüme ihtiyacınız var ve Besteci çok iyi bir iş çıkarıyor.

Verim

Nesne önbelleğini kullanmadan başladık. Bunun kötü bir fikir olduğu ortaya çıktı. WooCommerce kullanarak önemli miktarda satış gerçekleştiriyorsanız, nesne önbelleğe almaya ihtiyacınız vardır. Onsuz, bir sipariş modelinin o siparişle ilgili her istekte tamamen yeniden etkinleştirilmesi gerekir. Çok maliyetli çünkü sipariş modeli birçok sayfada gerekli. En azından, tüm ödeme sayfalarının siparişe erişmesi gerekir.

Ayrıca, önbelleğe almadan performansı artırmak için WooCommerce üzerinde birkaç çekme isteği oluşturduk. Bunlardan biri, para birimlerini önbelleğe almak için yapılan bir değişiklikti. Değişiklikten önce, herhangi bir kod parçası sadece bir para birimine ihtiyaç duyduğunda tüm para birimleri çevrilecekti. Her dükkanın yalnızca bir para biriminde çalıştığını düşünürsek bu çok verimsizdir.

WooCommerce içinde basitçe düzeltemeyeceğimiz bir şey, siparişleri ve abonelikleri aramaktı. Bunu yapmak, tüm web sitemizi çökertebilecek bir sorguya neden olur - bu sorgu, post meta için birçok arama içerir ve bunlar uzun zaman alır. MyYoast'ın üzerine kendi arama işlevimizi oluşturarak bu sorunu çözdük.

WooCommerce, neyse ki zaten WooCommerce teknik yol haritasında bulunan özel tablolar kullansaydı, meta arama sorunu da çözülürdü. Bu sorun aynı zamanda kendi eklentimiz hakkındaki düşüncelerimizi de bilgilendirdi. Yoast SEO'nun oluşturduğu meta anahtarların miktarını azaltabilir miyiz? Sonuç olarak, kendi teknik yol haritamıza özel bir tablo oluşturmayı da ekledik.

WordPress eklentilerinin ve WooCommerce uzantılarının güncel listesi

Nereye geldiğimiz hakkında kapsamlı bir fikir vermek için, şu anda kullandığımız ve sitemizin mağaza işleviyle ilgili eklentilerin listesi burada. Tam liste 55 aktif eklenti içerir.

  • CMB2: Gönderi türlerine daha fazla özel alan eklemek için kullanılır.
  • CMB2 Alan Türü: Birden çok gönderiyi meta değer olarak eklemek için kullanılır.
  • CMB2 Gönderi Arama alanı: Meta değer olarak eklenecek tek bir gönderiyi aramak için kullanılır.
  • Google Authenticator: Girişimize 2FA ekleniyor.
  • Google Authenticator, Kullanıcı Başına Bilgi İstemi: Bu şekilde tüm Yoast çalışanları 2FA kullanabilir, ancak müşterilerin kullanması gerekmez.
  • WordPress için MailChimp ve WordPress için MailChimp – Premium: Siparişleri MailChimp'e bağlamak için kullanılır.
  • Üyeler: Destek mühendisleri gibi farklı rollere ilişkin izinleri yönetmek için.
  • MultilingualPress: Çoklu sitedeki farklı siteleri yönetmek için kullanılır.
  • MyYoast Özel Giriş: Giriş ekranının stilini ayarlar.
  • WordPress için Yeni Kalıntı Raporlaması: Performansımızı izlemek için NewRelic kullanıyoruz.
  • Posta damgası: E-postaları güvenilir bir şekilde göndermek için.
  • Romantik Yönetici Renk Düzeni: Herkesin hayatında biraz pembeye ihtiyacı vardır!
  • WooCommerce: Tahmin edebileceğiniz gibi, siparişleri yoast.com'da işlemek için!
  • Yoast SEO: WooCommerce: WooCommerce ve Yoast SEO arasında uyumluluk ekleme.
  • Yoast SEO Premium: Yönlendirmeler, dahili bağlantı önerileri ve birden çok anahtar kelime için kullanılır.

WordPress eklentilerinin ve WooCommerce uzantılarının güncel listesi

  • WooCommerce – Ülke Bazlı Ödemeler: Farklı ülkelerden müşterilere farklı ödeme yöntemleri göstermek için kullanılır.
  • WooCommerce AdyenCw: Adyen ödeme ağ geçitlerini WooCommerce'e eklemek için kullanılır.
  • WooCommerce Kupon Bağlantıları: Belirli bir kuponu otomatik olarak uygulayan bağlantılar oluşturmak için kullanılır.
  • WooCommerce Dinamik Fiyatlandırma : Toplu alımlarda indirim sunmak için kullanılır.
  • WooCommerce E-posta Özelleştirici: WooCommerce'in gönderdiği e-postaları biçimlendirmek için kullanılır.
  • WooCommerce AB KDV Numarası: Avrupalı ​​müşterilerin KDV numarasını toplamak ve VIES hizmetini kullanarak numarayı doğrulamak için kullanılır.
  • WooCommerce Ürünleri Ver: Ürünleri vermek için kullanılır.
  • WooCommerce PayPal Express Checkout Gateway: WooCommerce Abonelikleri desteğiyle WooCommerce'e bir PayPal ödeme ağ geçidi eklemek için kullanılır.
  • WooCommerce Ürün Paketleri: Mağazamızda paketler oluşturmak için kullanılır.
  • WooCommerce Abonelikleri: Eklenti desteği ve güncellemelerinde kalan süreyi takip etmek için kullanılır.
Yoast.com artık WooCommerce'i çalıştırıyor
Artık WooCommerce tarafından desteklenen yoast.com'da kendinize bir göz atın.

Çıkarımlar ve sonuçlar

Bu yeni platformu 29 Ağustos 2017'de kullanıma sunduk. Takip eden haftalarda sitenin performansını büyük ölçüde iyileştirdik. Ulaşmak istediğimiz tüm hedeflere ulaştık. Göçten bu yana birçok başka şey inşa etmeye başladık. Destek ekibimiz artık hesapları iade etmek ve transfer etmek için çok daha kolay bir zamana sahip. Yoast akademimizi çoklu siteye taşıdık. Ve 2018 için bir sürü heyecan verici planımız var:

  • İngiliz sterlini ile satış yaptığımız bir mağaza ekliyoruz. Geçmişteki seçimlerimiz ve WooCommerce'e geçişimiz sayesinde bunu bir günde yapabiliyoruz, neredeyse hiç ek kod gerektirmeyecek. Satış ekibimiz için bir satış panosu ekleme.
  • Satış ekibimiz için bir satış panosu ekleme.
  • Premium eklentilerimize Besteci desteği ekleme.

WooCommerce, Yoast'a platformumuzu önümüzdeki on yılda inşa edip geliştireceğimiz teknik temeli verdi. Mevcut bir web mağazasını başka bir platforma taşımayı düşünüyor musunuz? Bunu zaten yaptın mı? Deneyiminizi yorumlarda paylaşın.