Migracja sklepu internetowego Yoast.com z EDD do WooCommerce
Opublikowany: 2018-02-27W Yoast optymalizujemy każdy aspekt działania stron internetowych. Naszym celem jest uczynienie sieci lepszym miejscem poprzez uczynienie stron internetowych bardziej użytecznymi, łatwiejszymi w nawigacji, szybszymi i bardziej niezawodnymi.
We wrześniu 2017 przenieśliśmy nasz sklep internetowy z Easy Digital Downloads (EDD) do WooCommerce — to tam sprzedajemy wszystkie narzędzia, produkty i treści dostępne na yoast.com. W tym poście wyjaśnię, dlaczego to zrobiliśmy, co zbudowaliśmy i jakie korzyści przyniesie to nam i naszym użytkownikom w przyszłości. WooCommerce zapewniło nam techniczną podstawę, na której możemy budować przez wiele lat.
Dlaczego zmiana?
Yoast.com przeżywa niesamowity wzrost napędzany przez dwa główne elementy — popularność naszej wtyczki i rosnącą publiczność naszego bloga SEO. Połączenie tych dwóch elementów sprawia jednak, że yoast.com jest witryną wymagającą zarządzania.
Historycznie strona ewoluowała od prostej instalacji WordPressa. Easy Digital Downloads (EDD) został dodany przez założyciela Yoast, Joosta de Valka, aby ułatwić sprzedaż wtyczek premium. Wykorzystaliśmy również EDD do udostępniania aktualizacji dla wszystkich instalacji Premium na świecie.
Z biegiem lat wprowadzaliśmy coraz więcej poprawek, aby upewnić się, że EDD może nadal służyć naszym potrzebom. Na przykład umożliwienie naszym klientom płatności w euro lub dolarach było ogromnym wysiłkiem. Ponieważ w przyszłości chcieliśmy dodać inne waluty, musieliśmy znaleźć inne rozwiązanie.
Kiedy przyjrzeliśmy się innym opcjom, rozważyliśmy kilka potrzeb:
- Możliwość obsługi zakupów w wielu walutach.
- Możliwość obsługi płatności cyklicznych.
- Koszt integracji budynku i utrzymania platformy.
- Możliwość obsługi kont użytkowników.
- Tworzenie platformy SEO.
- Biorąc pod uwagę przyszłą kompatybilność, ponieważ chcemy mieć witrynę, która nadal będzie działać za 5-10 lat.
Aby to wszystko osiągnąć, musieliśmy wymyślić plan.
Pomysł
W styczniu 2017 umówiliśmy się na spotkanie z naszym zespołem architektów: Joostem, Omarem, Jipem i mną. Rozmawialiśmy, jakie były nasze potrzeby i jak najlepiej je zaspokoić.
Nasz pierwszy wniosek był taki, że nie chcemy odchodzić od WordPressa. Mimo że mamy teraz wtyczki dla innych platform, jesteśmy fanami WordPressa i bardzo zależy nam na jego misji. WordPress jest tam, gdzie są nasze korzenie i bardzo dobrze sprawdził się dla nas jako CMS.
Dlaczego WooCommerce?
Następnie zastanowiliśmy się, z której platformy eCommerce chcemy skorzystać. Zadaliśmy sobie pytanie, jakie jest najlepsze rozwiązanie eCommerce dla WordPressa i doszliśmy do wniosku, że to WooCommerce. Ale, podobnie jak EDD, WooCommerce nie obsługuje wielu walut. Potrzebowaliśmy więc rozwiązania.
Jestem wielkim fanem idei, że wszystko jest remiksem. Zainspirował nas pomysł wykorzystania innej strony dla każdego języka, pomysł, który został dobrze zrealizowany przez wtyczkę MultilingualPress. Zremiksowaliśmy to: aby uniknąć konieczności pisania mnóstwa niestandardowego kodu, zdecydowaliśmy się na instalację wielostanowiskową.
W rezultacie WooCommerce nie musi zarządzać różnymi walutami. Na stronie dolara WooCommerce robi wszystko w dolarach. Na stronie euro WooCommerce robi wszystko w euro. Ułatwia to również stosunkowo łatwe dodanie nowej waluty. Po prostu dodamy nową witrynę i skopiujemy ustawienia. W połączeniu z MultilingualPress w przyszłości umożliwi nam to również obsługę różnych języków.
WooCommerce okazał się świetnym rozwiązaniem dla yoast.com z kilku powodów:
- Dobry model danych.
- Duży ekosystem.
- Wbudowane API REST i obsługa webhooka.
- Możliwość dogfood naszej wtyczki w połączeniu z WooCommerce.
- WooCommerce rozwiązuje domenę eCommerce. Nie chcieliśmy spędzać dużo czasu na pracy nad domeną eCommerce. SEO to nasza wiedza, dlatego chcemy skupić się na SEO.
- WooCommerce ma żywą społeczność, w której możemy uczestniczyć.
Handel elektroniczny: kody SKU, dane historyczne i zwroty
Chcę się przez chwilę skupić na domenie eCommerce. Jednym z aspektów do rozważenia jest tutaj SKU. Każdy produkt posiada SKU — unikalny identyfikator. SKU może brzmieć jak coś zbędnego. Dlaczego potrzebuję SKU, skoro mam identyfikator w bazie danych? Ale wtedy zdajesz sobie sprawę, że każdy dział finansowy każdej firmy ma już ten system. Jednostki SKU nie są automatycznie zwiększane — potrzebujesz sposobu na śledzenie produktów w sposób, który jest jednoznaczny. Nazwy nie nadają się do tego. Tak więc na yoast.com SKU jest teraz tym samym numerem, którego używa nasz dział finansowy do śledzenia produktów.
Kolejnym wymogiem było posiadanie historycznej ewidencji każdego zakupu. WooCommerce robi to domyślnie. Po zrealizowaniu zamówienia to wszystko. Wszystkie dane są niezmienne. Jeśli klient zmieni swoje imię i nazwisko, adres lub adres e-mail, nowe informacje zostaną wykorzystane tylko do nowych zamówień. Dla programisty może to zabrzmieć dziwnie, ale w rzeczywistości jest to mocna strona. Nie chciałbyś też, aby Twój bank zmieniał transakcje po fakcie — kiedy już są skończone, są skończone. Każda mutacja to nowa transakcja.
Posiadanie danych historycznych robi największą różnicę, jeśli chodzi o zwroty. W starym układzie zamówienia zwrócone zniknęłyby z naszego eksportu, co zmieniłoby przychody w tym miesiącu. W WooCommerce każdy zwrot pieniędzy ma swoją datę i kwotę. Tak więc raz w miesiącu to się robi naprawdę.
W WooCommerce każdy zwrot pieniędzy ma swoją datę i kwotę. Tak więc raz w miesiącu to się robi naprawdę.
Szczegóły techniczne migracji Yoast.com do WooCommerce
Migracja
Mamy dużo danych historycznych, co oznaczało, że musieliśmy przenieść dużą liczbę zamówień. Wybraliśmy narzędzie o nazwie pandas, narzędzie przeznaczone do obsługi dużych zbiorów danych, które jest dobrym wyborem do jednoczesnej migracji. Gdybyśmy planowali kolejną migrację, prawdopodobnie poszlibyśmy w innym kierunku — powoli formatowalibyśmy dane historyczne na przestrzeni miesięcy. To drastycznie zmniejszyłoby ilość danych do migracji w dniu faktycznej przeprowadzki.
Był jeden główny problem, który sprawiał, że proces był bardziej złożony niż powinien. Ponieważ wszystkie dane zostały zapisane w jednej wartości meta w bazie danych, musiały zostać uszeregowane. Python nie ma wydajnego i poprawnego sposobu na odserializowanie PHP, więc ostatecznie przerzuciliśmy się na PHP, aby móc odserializować te dane.
Agregacja danych
Być może zauważyłeś, że mamy teraz dwie witryny. Ale nadal chcemy mieć przegląd wszystkich danych w jednym miejscu. To jeden z powodów, dla których budujemy MyYoast. Wszystkie otrzymywane przez nas zamówienia są synchronizowane z MyYoast. Oznacza to, że MyYoast wie wszystko.
WooCommerce posiada system do synchronizacji wszystkich zamówień: webhooki. Największą wadą webhooków jest ogólnie to, że jeśli system odbierający nie działa, webhook nie jest odbierany. Przeglądając kod webhooków, można znaleźć następujący fragment:
„`
/*
* Pozwól innym wtyczkom przechwycić dostarczanie dla niektórych kolejek wiadomości, takich jak rabbit/zeromq
*/
return apply_filters( 'woocommerce_webhook_should_deliver', $should_deliver, $this, $arg );
„`
Rozważaliśmy użycie kolejki wiadomości zgodnie z sugestią w komentarzu, ale zdecydowaliśmy się na prostsze podejście.
Istnieje projekt delayed_job od społeczności Ruby on Rails. Znaleźliśmy port PHP, który odpowiadał naszym potrzebom. Opóźnione zadanie robi to, co sugeruje jego nazwa: planuje zadanie do wykonania później. Oznacza to, że nigdy nie można stracić pracy. A jeśli zadanie się nie powiedzie, zostanie powtórzone jeszcze cztery razy. Następnie zadanie może być użyte do debugowania tego, co poszło nie tak. To daje nam naprawdę solidną konfigurację.
Skonfigurowaliśmy WooCommerce tak, aby próbował wysyłać webhooki na nasz niestandardowy fikcyjny adres URL: `http://my-yoast-job.url`. Dzięki temu możemy przechwycić te żądania z kodu. Mamy jedną klasę `Scheduler`, która jest odpowiedzialna za planowanie zadań. Przechwytuje żądania webhooka i zamienia je w zadania.
Mamy kilka klas, które zajmują się zadaniami, po jednej dla każdego z podstawowych elementów konstrukcyjnych yoast.com. Zadania są następnie obsługiwane przez pracownika w tle. Ten proces jest szybki, więc klient natychmiast zobaczy swoje produkty w MyYoast.
WordPress jako aplikacja
Jeśli nigdy nie czytałeś aplikacji The Twelve-Factor , gorąco polecam to zrobić. Sugeruje bardzo solidne ramy do tworzenia aplikacji internetowych. Jak to się przekłada na kontekst WordPressa? Lepiej niż myślisz.
WordPress ma kilka unikalnych funkcji, które utrudniają konfigurację. Ale możesz je obejść, aby uzyskać solidną instalację WordPress. Jeśli robisz tylko jeden z nich, powinien to być czynnik zależności. Zacznij korzystać z Composera! Jest tutaj i działa. Rarst stworzył dobry przegląd tego, jak używać Composera do programowania WordPress. Automatyczne aktualizowanie nie jest opcją dla złożonej aplikacji internetowej. Potrzebujesz więc innego rozwiązania, a Composer wykonuje bardzo dobrą robotę.
Występ
Zaczęliśmy bez korzystania z pamięci podręcznej obiektów. Okazało się to złym pomysłem. Jeśli obsługujesz znaczną ilość sprzedaży za pomocą WooCommerce, potrzebujesz buforowania obiektów. Bez tego model zamówienia musi być całkowicie przywrócony na każde żądanie dotyczące tego zamówienia. Jest to bardzo kosztowne, ponieważ model zamówienia jest wymagany na wielu stronach. Co najmniej wszystkie strony kasy muszą mieć dostęp do zamówienia.
Stworzyliśmy również kilka żądań ściągnięcia w samym WooCommerce, aby poprawić wydajność bez buforowania. Jednym z nich była modyfikacja buforowania walut. Przed modyfikacją wszystkie waluty byłyby przeliczane za każdym razem, gdy jakikolwiek fragment kodu wymagał tylko jednej waluty. To bardzo nieefektywne, biorąc pod uwagę, że każdy sklep działa tylko w jednej walucie.
Jedną z rzeczy, których nie mogliśmy po prostu naprawić w samym WooCommerce, było wyszukiwanie zamówień i subskrypcji. Spowodowałoby to zapytanie, które mogłoby spowodować usunięcie całej naszej witryny — to zapytanie zawiera wiele wyszukiwań meta postów, a te zajmują dużo czasu. Rozwiązaliśmy ten problem, tworząc własną funkcję wyszukiwania na MyYoast.
Problem metawyszukiwania zostałby również rozwiązany, gdyby WooCommerce używał niestandardowych tabel, co na szczęście znajduje się już na technicznej mapie drogowej WooCommerce. Ten problem również skłonił nas do myślenia o własnej wtyczce. Czy możemy zmniejszyć ilość metakluczy tworzonych przez Yoast SEO? W rezultacie dodaliśmy również tworzenie niestandardowej tabeli do naszej własnej technicznej mapy drogowej.
Aktualna lista wtyczek WordPress i rozszerzeń WooCommerce
Aby dać pełny obraz tego, gdzie wylądowaliśmy, poniżej znajduje się lista wtyczek, z których obecnie korzystamy, a które są istotne dla funkcjonowania naszej witryny jako sklepu. Pełna lista zawiera 55 aktywnych wtyczek.
- CMB2: Służy do dodawania więcej niestandardowych pól do typów postów.
- Typ pola CMB2: Służy do dołączania wielu postów jako wartości meta.
- Pole wyszukiwania postów CMB2: Służy do wyszukiwania pojedynczego posta do dołączenia jako wartości meta.
- Google Authenticator: Dodanie 2FA do naszego loginu.
- Google Authenticator, Per User Prompt: W ten sposób wszyscy pracownicy Yoast mogą korzystać z 2FA, ale klienci nie muszą.
- MailChimp dla WordPress i MailChimp dla WordPress – Premium: Służy do łączenia zamówień z MailChimp.
- Członkowie: do zarządzania uprawnieniami do różnych ról, takich jak inżynierowie pomocy technicznej.
- MultilingualPress: Służy do zarządzania różnymi witrynami w multisite.
- MyYoast Custom Login: Stylizuje ekran logowania.
- Raportowanie New Relic dla WordPress: Używamy NewRelic do śledzenia naszej wydajności.
- Data stempla pocztowego: do niezawodnego wysyłania e-maili.
- Schemat kolorów Romance Admin: Każdy potrzebuje odrobiny różu w swoim życiu!
- WooCommerce: Jak można się domyślić, przetwarzać zamówienia na yoast.com!
- Yoast SEO: WooCommerce: Dodano kompatybilność między WooCommerce i Yoast SEO.
- Yoast SEO Premium: Używany do przekierowań, sugestii linków wewnętrznych i wielu słów kluczowych.
Aktualna lista wtyczek WordPress i rozszerzeń WooCommerce
- WooCommerce — Płatności krajowe: Służy do pokazywania różnych metod płatności klientom z różnych krajów.
- WooCommerce AdyenCw: Służy do dodawania bramek płatności Adyen do WooCommerce.
- Łącza kuponów WooCommerce: Używane do tworzenia łączy, które automatycznie stosują określony kupon.
- Dynamiczne ceny WooCommerce : używane do oferowania rabatów na zakupy hurtowe.
- WooCommerce Email Customizer: Służy do stylizowania e-maili wysyłanych przez WooCommerce.
- Numer VAT UE WooCommerce: Służy do zbierania numeru VAT europejskich klientów i sprawdzania numeru za pomocą usługi VIES.
- WooCommerce Give Products: Używane do rozdawania produktów.
- WooCommerce PayPal Express Checkout Gateway: Służy do dodawania bramki płatności PayPal do WooCommerce z obsługą subskrypcji WooCommerce.
- Pakiety produktów WooCommerce: Używane do tworzenia pakietów w naszym sklepie.
- Subskrypcje WooCommerce: Używane do śledzenia czasu pozostałego na wsparcie i aktualizacje wtyczek.
Na wynos i wyniki
Uruchomiliśmy tę nową platformę 29 sierpnia 2017 r. W następnych tygodniach znacznie poprawiliśmy wydajność witryny. Osiągnęliśmy wszystkie cele, które chcieliśmy osiągnąć. Od czasu migracji zaczęliśmy też budować wiele innych rzeczy. Nasz zespół wsparcia ma teraz znacznie łatwiejszy czas na zwrot pieniędzy i przenoszenie kont. Przenieśliśmy naszą akademię Yoast do multisite. Mamy też kilka ekscytujących planów na 2018 rok, w tym:
- Dodanie sklepu, w którym sprzedajemy w funtach brytyjskich. Dzięki naszym wcześniejszym wyborom i przejściu na WooCommerce możemy to zrobić w jeden dzień, nie będzie to wymagało prawie żadnego dodatkowego kodu. Dodanie panelu sprzedaży dla naszego zespołu sprzedaży.
- Dodanie panelu sprzedaży dla naszego zespołu sprzedaży.
- Dodanie obsługi Composera do naszych wtyczek premium.
WooCommerce dał Yoast techniczne podstawy, na których można budować i ulepszać naszą platformę w następnej dekadzie. Rozważasz migrację istniejącego sklepu internetowego na inną platformę? Czy już to zrobiłeś? Podziel się swoim doświadczeniem w komentarzach.