Migrarea magazinului web Yoast.com de la EDD la WooCommerce
Publicat: 2018-02-27La Yoast, optimizăm fiecare aspect al performanței site-urilor web. Scopul nostru este să facem web-ul un loc mai bun, făcând site-urile web mai utilizabile, mai ușor de navigat, mai rapid și mai fiabil.
În septembrie 2017, ne-am migrat magazinul online de la Easy Digital Downloads (EDD) la WooCommerce - aici vindem toate instrumentele, produsele și conținutul disponibil pe yoast.com. În această postare, voi explica de ce am făcut-o, ce am construit și care vor fi beneficiile pentru noi și pentru utilizatorii noștri în viitor. WooCommerce ne-a oferit baza tehnică pe care să ne dezvoltăm în anii următori.
De ce schimbarea?
Yoast.com se confruntă cu o creștere incredibilă determinată de două componente principale — popularitatea pluginului nostru și publicul în creștere a blogului nostru SEO. Combinația acestor două elemente, totuși, face ca yoast.com un site web dificil de gestionat.
Din punct de vedere istoric, site-ul a evoluat de la o simplă instalare WordPress. Easy Digital Downloads (EDD) a fost adăugat de fondatorul Yoast, Joost de Valk, pentru a facilita vânzarea de pluginuri premium. De asemenea, am folosit EDD pentru a furniza actualizări pentru toate instalările Premium din lume.
De-a lungul anilor, am făcut din ce în ce mai multe modificări pentru a ne asigura că EDD ne poate satisface nevoile. A face posibil ca clienții noștri să plătească fie în euro, fie în dolari, de exemplu, a fost un efort enorm. Deoarece doream să adăugăm și alte monede în viitor, trebuia să găsim o soluție diferită.
Când am analizat alte opțiuni, am luat în considerare mai multe nevoi:
- Fiind capabil să suporte achiziții în mai multe valute.
- Fiind capabil să suporte plăți recurente.
- Costul integrării clădirii și mentenabilitatea platformei.
- Fiind capabil să suporte conturi de utilizator.
- Crearea unei platforme SEO.
- Ținând cont de compatibilitatea viitoare, întrucât ne dorim să avem un site care să funcționeze în continuare în 5-10 ani.
Pentru a realiza toate cele de mai sus, a trebuit să venim cu un plan.
Ideaţie
În ianuarie 2017 am programat o întâlnire cu echipa noastră de arhitecți: Joost, Omar, Jip și cu mine. Am discutat care sunt nevoile noastre și cum le putem satisface cel mai bine.
Prima noastră concluzie a fost că nu am vrut să ne îndepărtăm de WordPress. Chiar dacă acum avem plugin-uri pentru alte platforme, suntem fani WordPress și ne pasă profund de misiunea sa. WordPress este locul unde sunt rădăcinile noastre și a funcționat foarte bine pentru noi ca CMS.
De ce WooCommerce?
Ne-am gândit apoi ce platformă de comerț electronic dorim să folosim. Ne-am întrebat care este cea mai bună soluție de comerț electronic pentru WordPress și am ajuns la concluzia că este WooCommerce. Dar, ca și EDD, WooCommerce nu a acceptat mai multe monede. Deci aveam nevoie de o soluție.
Sunt un mare fan al ideii că totul este un remix. Ne-a inspirat ideea de a folosi un site diferit pentru fiecare limbă, idee care a fost bine executată de pluginul MultilingualPress. Așa că l-am remixat: pentru a evita să scriem o mulțime de cod personalizat, am decis să folosim o instalare multisite.
Drept urmare, WooCommerce nu trebuie să gestioneze diferite valute. Pe site-ul cu dolari, WooCommerce face totul în dolari. Pe site-ul euro, WooCommerce face totul în euro. Acest lucru face, de asemenea, relativ ușor să adăugați o nouă monedă. Am adăuga doar un site nou și am copia setările. În combinație cu MultilingualPress, în viitor, acest lucru ne va face posibil să acceptăm diferite limbi.
WooCommerce a ajuns să fie potrivit pentru yoast.com din mai multe motive:
- Un model de date bun.
- Un ecosistem mare.
- API REST și suport pentru Webhook încorporate.
- Posibilitatea de a testa pluginul nostru în combinație cu WooCommerce.
- WooCommerce rezolvă domeniul comerțului electronic. Nu am vrut să petrecem mult timp lucrând pe domeniul eCommerce. SEO este expertiza noastră, așa că vrem să ne concentrăm pe SEO.
- WooCommerce are o comunitate vibrantă la care putem participa.
eCommerce: SKU-uri, înregistrări istorice și rambursări
Vreau să mă concentrez pentru un moment pe domeniul eCommerce. Un aspect de luat în considerare aici este SKU. Fiecare produs are un SKU - un identificator unic. Un SKU ar putea suna ca ceva de prisos. De ce am nevoie de un SKU când am un ID în baza de date? Dar apoi realizezi că fiecare departament financiar al fiecărei companii are deja acest sistem în vigoare. SKU-urile nu sunt incrementate automat - aveți nevoie de o modalitate de a urmări produsele într-un mod clar. Numele nu sunt potrivite pentru asta. Deci, pe yoast.com, SKU este acum același număr pe care departamentul nostru financiar îl folosește pentru a urmări produsele.
O altă cerință a fost de a avea o înregistrare istorică a fiecărei achiziții. WooCommerce face acest lucru în mod implicit. Odată ce o comandă este finalizată, asta este tot. Toate datele sunt imuabile. Dacă un client își schimbă numele, adresa sau adresa de e-mail, noile informații sunt folosite numai pentru comenzi noi. Pentru un dezvoltator, acest lucru poate suna ciudat, dar este de fapt un punct forte. Nici nu ați dori ca banca dvs. să schimbe tranzacțiile după fapt - odată ce sunt încheiate, sunt terminate. Orice mutație este o tranzacție nouă.
A avea o înregistrare istorică face cea mai mare diferență atunci când vine vorba de rambursări. În configurația veche, comenzile rambursate ar dispărea din exporturile noastre, ceea ce ar modifica veniturile lunii respective. În WooCommerce, fiecare rambursare are propria dată și sumă. Deci, o dată pe lună este gata, este cu adevărat gata.
În WooCommerce, fiecare rambursare are propria dată și sumă. Deci, o dată pe lună este gata, este cu adevărat gata.
Detalii tehnice despre migrarea Yoast.com la WooCommerce
Migrația
Avem o mulțime de date istorice, ceea ce a însemnat că a trebuit să migrăm un număr mare de comenzi. Am ales un instrument numit panda, un instrument conceput pentru a gestiona seturi mari de date și o alegere bună pentru migrarea acestora simultan. Dacă am planifica o altă migrare, probabil că am merge într-o altă direcție - am formata încet datele istorice de-a lungul lunilor. Acest lucru ar reduce drastic cantitatea de date de migrat în ziua mutării efective.
A existat un punct principal de durere care a făcut procesul mai complex decât trebuia să fie. Deoarece toate datele au fost salvate într-o singură metavaloare în baza de date, acestea trebuiau să fie neserializate. Python nu are o modalitate eficientă și corectă de a face deserializarea PHP, așa că am ajuns să deserializăm PHP pentru a putea deserializa aceste date.
Agregarea datelor
Poate ați observat că acum avem două site-uri. Dar vrem totuși să avem o imagine de ansamblu asupra tuturor datelor într-o singură locație. Acesta este unul dintre motivele pentru care construim MyYoast. Toate comenzile pe care le primim sunt sincronizate cu MyYoast. Aceasta înseamnă că MyYoast știe totul.
WooCommerce are un sistem de sincronizare a tuturor comenzilor: webhooks. Cel mai mare dezavantaj al webhook-urilor, în general, este că, dacă sistemul de recepție nu este, webhook-ul nu este primit. Când vă uitați la codul webhook-urilor, găsiți următorul fragment:
„`
/*
* Lăsați alte plugin-uri să intercepteze livrarea pentru unele mesaje în coada de așteptare, cum ar fi rabbit/zeromq
*/
return apply_filters( 'woocommerce_webhook_should_deliver', $should_deliver, $this, $arg );
„`
Ne-am gândit să folosim o coadă de mesaje așa cum este sugerat în comentariu, dar am optat pentru o abordare mai simplă.
Există un proiect delayed_job din comunitatea Ruby on Rails. Am găsit un port PHP care se potrivea nevoilor noastre. Lucrarea întârziată face ceea ce sugerează numele său: programează un job pentru a fi executat mai târziu. Aceasta înseamnă că un loc de muncă nu poate fi niciodată pierdut. Și dacă lucrarea eșuează, va fi reîncercată de încă patru ori. După aceea, lucrarea poate fi folosită pentru depanarea a ceea ce a mers prost. Acest lucru ne oferă o configurație cu adevărat robustă.
Am configurat WooCommerce să încerce să trimită webhook-uri la adresa URL inactivă personalizată: `http://my-yoast-job.url`. Acest lucru ne asigură că putem prinde aceste solicitări din cod. Avem o clasă `Scheduler` care este responsabilă cu programarea locurilor de muncă. Captează cererile webhook și le transformă în locuri de muncă.
Avem mai multe clase care se ocupă de locuri de muncă, câte una pentru fiecare dintre elementele fundamentale ale yoast.com. Lucrările sunt apoi gestionate de un muncitor în fundal. Acest proces este rapid, astfel încât un client își va vedea instantaneu produsele în MyYoast.
WordPress ca aplicație
Dacă nu ați citit niciodată aplicația The Twelve-Factor , v-aș recomanda cu căldură să faceți acest lucru. Acesta sugerează un cadru foarte robust pentru dezvoltarea de aplicații web. Cum se traduce acest lucru într-un context WordPress? Mai bine decât ai putea crede.
WordPress are câteva caracteristici unice care fac mai greu de configurat. Dar le puteți rezolva pentru a obține o instalare WordPress robustă. Dacă faci doar una dintre acestea, ar trebui să fie factorul dependențe. Începeți să utilizați Composer! Este aici și funcționează. Rarst a creat o imagine de ansamblu bună asupra modului de utilizare a Composer pentru dezvoltarea WordPress. Actualizarea automată nu este o opțiune pentru o aplicație web complexă. Deci, aveți nevoie de o soluție diferită, iar Composer face o treabă foarte bună.
Performanţă
Am început fără să folosim cache-ul obiectelor. S-a dovedit a fi o idee proastă. Dacă gestionați un volum substanțial de vânzări folosind WooCommerce, aveți nevoie de stocarea în cache a obiectelor. Fără acesta, un model de comandă trebuie să fie complet reinstanțat la fiecare solicitare privind acea comandă. Este foarte costisitor, deoarece modelul de comandă este necesar pe mai multe pagini. Cel puțin, toate paginile de plată trebuie să acceseze comanda.
De asemenea, am creat câteva solicitări de extragere pe WooCommerce în sine pentru a îmbunătăți performanța fără cache. Una dintre acestea a fost o modificare pentru memorarea în cache a monedelor. Înainte de modificare, toate monedele erau traduse de fiecare dată când orice fragment de cod avea nevoie de o singură monedă. Acest lucru este foarte ineficient, având în vedere că fiecare magazin rulează doar într-o singură monedă.
Un lucru pe care nu l-am putut rezolva pur și simplu în interiorul WooCommerce în sine a fost căutarea comenzilor și a abonamentelor. Dacă faceți acest lucru, ar rezulta o interogare care ar putea distruge întregul nostru site web - această interogare conține multe căutări pentru meta postare, iar acestea durează mult timp. Am rezolvat această problemă prin construirea propriei noastre funcționalități de căutare pe MyYoast.
Problema meta-căutării ar fi rezolvată și dacă WooCommerce ar folosi tabele personalizate, care din fericire se află deja pe foaia de parcurs tehnică WooCommerce. Această problemă ne-a informat și gândirea despre propriul nostru plugin. Putem reduce cantitatea de meta chei pe care Yoast SEO le creează? Ca rezultat, am adăugat și crearea unui tabel personalizat la propria noastră foaie de parcurs tehnică.
Lista actuală de pluginuri WordPress și extensii WooCommerce
Pentru a oferi o idee cuprinzătoare despre locul în care am aterizat, iată lista de pluginuri pe care le folosim în prezent și care sunt relevante pentru funcționarea site-ului nostru ca magazin. Lista completă conține 55 de pluginuri active.
- CMB2: utilizat pentru adăugarea mai multor câmpuri personalizate la tipurile de postări.
- Tip câmp CMB2: folosit pentru a atașa mai multe postări ca meta valoare.
- Câmp CMB2 Căutare postare: folosit pentru a căuta o singură postare de atașat ca meta valoare.
- Google Authenticator: Adăugarea 2FA la autentificarea noastră.
- Google Authenticator, Per User Prompt: În acest fel, toți angajații Yoast pot folosi 2FA, dar clienții nu trebuie.
- MailChimp pentru WordPress și MailChimp pentru WordPress – Premium: Folosit pentru a conecta comenzi la MailChimp.
- Membri: pentru gestionarea permisiunilor pentru diferite roluri, cum ar fi inginerii de asistență.
- MultilingualPress: Folosit pentru a gestiona diferitele site-uri din multisite.
- MyYoast Custom Login: Stilează ecranul de conectare.
- New Relic Reporting pentru WordPress: folosim NewRelic pentru a ne urmări performanța.
- Marca poștală: Pentru a trimite e-mailuri în mod fiabil.
- Schema de culori pentru administratorul Romance: Toată lumea are nevoie de puțin roz în viața lor!
- WooCommerce: După cum ați putea ghici, pentru a procesa comenzi pe yoast.com!
- Yoast SEO: WooCommerce: Adăugarea de compatibilitate între WooCommerce și Yoast SEO.
- Yoast SEO Premium: Folosit pentru redirecționări, sugestii de link-uri interne și mai multe cuvinte cheie.
Lista actuală de pluginuri WordPress și extensii WooCommerce
- WooCommerce – Plăți bazate pe țară: Folosit pentru a afișa diferite metode de plată clienților din diferite țări.
- WooCommerce AdyenCw: Folosit pentru a adăuga gateway-uri de plată Adyen la WooCommerce.
- Link-uri de cupon WooCommerce: Folosit pentru a crea link-uri care aplică automat un anumit cupon.
- Prețuri dinamice WooCommerce : Folosit pentru a oferi reduceri la achizițiile în vrac.
- Personalizare e-mail WooCommerce: Folosit pentru a stila e-mailurile pe care le trimite WooCommerce.
- Număr de TVA UE WooCommerce: Folosit pentru a colecta numărul de TVA al clienților europeni și pentru a valida numărul utilizând serviciul VIES.
- WooCommerce Give Products: Folosit pentru a oferi produse.
- WooCommerce PayPal Express Checkout Gateway: utilizat pentru a adăuga o poartă de plată PayPal la WooCommerce cu suport pentru abonamente WooCommerce.
- Pachetele de produse WooCommerce: utilizate pentru a crea pachetele în magazinul nostru.
- Abonamente WooCommerce: Folosit pentru a ține evidența timpului rămas pe suport și actualizări pentru plugin.
Recomandări și rezultate
Am lansat această nouă platformă pe 29 august 2017. În săptămânile care au urmat am îmbunătățit foarte mult performanța site-ului. Am atins toate obiectivele pe care ne-am dorit să le atingem. De la migrație am început să construim și multe alte lucruri. Echipa noastră de asistență are acum mult mai ușor rambursarea și transferul conturilor. Am migrat academia noastră Yoast la multisite. Și avem o mulțime de planuri interesante pentru 2018, inclusiv:
- Adăugarea unui magazin unde vindem în lire sterline. Datorită alegerilor noastre anterioare și trecerii noastre la WooCommerce, putem face acest lucru într-o zi, nu va necesita aproape niciun cod suplimentar. Adăugarea unui tablou de bord de vânzări pentru echipa noastră de vânzări.
- Adăugarea unui tablou de bord de vânzări pentru echipa noastră de vânzări.
- Adăugarea suportului Composer la pluginurile noastre premium.
WooCommerce i-a oferit lui Yoast baza tehnică pe care să construiască și să îmbunătățească platforma noastră în următorul deceniu. Vă gândiți să migrați un magazin web existent pe o altă platformă? Ai făcut asta deja? Împărtășește-ți experiența în comentarii.