O projekcie
Sklep internetowy z karmą i akcesoriami dla zwierząt, zbudowany na WordPressie i WooCommerce, z dwiema wtyczkami napisanymi specjalnie pod tę branżę. Powstały dlatego, że dwa najdroższe problemy sklepu zoologicznego nie mają rozwiązania ani w żadnym motywie, ani w standardowym WooCommerce — a oba kosztują codziennie: jeden sprzedaż, drugi czas.
Pierwszy jest po stronie klienta. Ta sama karma stoi w katalogu w kilku gramaturach, a pytanie, które klient naprawdę zadaje, nie brzmi „które opakowanie”, tylko „na jak długo mi starczy”. Dopóki musi to przeliczyć sam, wybiera najtańsze opakowanie albo wychodzi ze sklepu. Wtyczka kalkulatora liczy dzienną rację z gatunku, wagi, wieku i aktywności zwierzęcia, po czym wskazuje konkretny wariant produktu i dzień, w którym opakowanie się skończy.
Drugi jest po stronie sklepu. Kilka tysięcy indeksów, ceny i stany magazynowe zmieniające się w hurtowni codziennie, a między jednym a drugim ręczne zgrywanie pliku. Wtyczka synchronizacji przejmuje cały ten odcinek: import katalogu z dopasowaniem po EAN, reguły marż liczone przy imporcie, przyrostowa aktualizacja stanów w kolejce i eksport feedu produktowego do porównywarek.
Obie wtyczki są osobnymi pakietami z własnym cyklem życia, a nie zbiorem funkcji doklejonych do motywu. Logika siedzi w hookach WooCommerce, nie w nadpisanych szablonach, więc aktualizacja sklepu albo zmiana motywu nie wymaga dotykania żadnej z nich. Profile zwierząt i log importu mają własne tabele; produkty zostają tam, gdzie ich miejsce — w WooCommerce, ze standardowymi wariantami, żeby płatności, wysyłka i integracje księgowe działały bez wyjątków.
Rozdzielenie na dwie wtyczki zamiast jednej jest decyzją, nie przypadkiem. Kalkulator pracuje na froncie, w czasie żądania, i musi być szybki; synchronizacja pracuje w tle, długo, i musi być odporna na przerwanie w połowie. To dwa różne reżimy pracy, dwa różne sposoby testowania i dwa różne powody, dla których coś może paść — wspólny pakiet znaczyłby, że awaria nocnego importu potrafi zdjąć kalkulator z karty produktu.
Problem
Sklep zoologiczny sprzedaje ten sam produkt w kilku gramaturach i żyje z powrotów po kolejne opakowanie — a klient nie potrafi sam przeliczyć, ile kupić i kiedy wrócić. Równolegle katalog, ceny i stany trzeba było codziennie ręcznie zgrywać z plikiem hurtowni.
Rozwiązanie
Dwie wtyczki, które dokładają WooCommerce dokładnie to, czego w nim nie ma: kalkulator zapotrzebowania, który zamienia parametry zwierzęcia w konkretny wariant i datę kolejnego zamówienia, oraz synchronizację katalogu, cen i stanów z hurtownią wraz z feedem produktowym.
Funkcje
- klient widzi, na ile dni starczy opakowanie, zanim doda je do koszyka
- profil zwierzaka w koncie — kolejne zamówienie to dwa kliknięcia
- warianty wagowe z przeliczeniem na kilogram, żeby dało się je porównać
- przypomnienie o ponownym zakupie liczone z daty wyczerpania opakowania
- ceny i stany zgodne z hurtownią bez ręcznego zgrywania pliku
- produkty wycofane z oferty nie gubią adresów ani pozycji w wyszukiwarce
- karty produktów z danymi strukturalnymi Product i Offer
- feed produktowy gotowy dla Google Merchant i porównywarek cen
Moduły
zoo-kalkulator-karmy
wtyczka WordPressZamienia pytanie „które opakowanie kupić” w liczbę dni i konkretny wariant w koszyku.
- dzienna racja z gatunku, wagi, wieku i poziomu aktywności zwierzęcia
- tabela karmienia producenta wczytywana per produkt, z wartością domyślną dla reszty katalogu
- wynik trafia do koszyka jako wariant, a nie zostaje samą informacją — jedno kliknięcie od decyzji
- profil zwierzaka w koncie klienta: kolejne zamówienie zaczyna się od gotowych parametrów
- data wyczerpania opakowania jako podstawa przypomnienia o ponownym zakupie
zoo-sync-hurtowni
wtyczka WordPressTrzyma katalog, ceny i stany magazynowe zgodne z hurtownią bez ręcznego zgrywania pliku.
- import pliku hurtowni z mapowaniem kategorii i dopasowaniem produktów po EAN
- reguły cenowe i marże liczone przy imporcie, osobno dla grup produktów
- aktualizacja stanów w cyklu cron — przyrostowo, w kolejce, z limitem czasu na przebieg
- produkty wycofane z oferty są chowane, nie kasowane: adresy i pozycja w wyszukiwarce zostają
- log każdego przebiegu: co weszło, co się zmieniło, co odrzucone i z jakiego powodu
- eksport feedu produktowego dla Google Merchant i porównywarek cen
Architektura
- Podstawa
- WordPress z WooCommerce i motywem potomnym — logika we wtyczkach, nie w motywie
- Kod wtyczek
- PHP obiektowy, hooki i filtry WooCommerce zamiast nadpisywania szablonów
- Dane
- własne tabele MySQL na profile zwierząt i log importu; produkty zostają w WooCommerce
- Zadania cykliczne
- cron z kolejką porcjowaną — pełny import nie mieści się w jednym przebiegu PHP
- Integracje
- plik katalogowy hurtowni, REST API sklepu, feed produktowy XML
- Frontend
- kalkulator w czystym JavaScripcie, bez frameworka; treść karty renderowana po stronie serwera
- Bezpieczeństwo
- nonce przy każdym żądaniu, walidacja i sanityzacja wejścia, uprawnienia per rola
- Wydajność
- cache wyników kalkulatora, zapytania po indeksach, brak dodatkowych zapytań na listingu
Technologie
- WordPress
- WooCommerce
- PHP
- MySQL
- JavaScript
- REST API
Autor
Mariusz PerzyńskiClient Relations & Operations