Moduł PrestaShop i wtyczka WooCommerce to nie to samo co integracja z API kuriera czy ERP — pierwsze to kod działający w Twoim sklepie, drugie to sposób wymiany danych z systemem zewnętrznym. W praktyce jedno bez drugiego rzadko działa: bez modułu nie ma gdzie zapisać logiki, bez integracji dane nie wrócą do sklepu. Ta część artykułu jest organizacyjna — pokazuje, jak przygotować brief, jak wygląda proces od wyceny do wdrożenia i co musi znaleźć się w umowie, żeby nie płacić dwa razy. Nie ma tu cennika z sufitu, są widełki godzinowe i punkty kontrolne. Piszemy to z perspektywy wdrożeń dla firm z Lubelszczyzny, w tym z Bełżca i okolic.
Zanim przejdziemy do wycen, trzeba rozdzielić trzy pojęcia, które w rozmowach z wykonawcami padają zamiennie: moduł, wtyczka i integracja. To nie to samo i inaczej się je wycenia.
Moduł PrestaShop to katalog w /modules/ — np. /modules/mojmodul/ — z plikiem głównym o tej samej nazwie, klasą dziedziczącą po Module i metodą install(), która rejestruje hooki (displayHeader, actionCartSave, actionValidateOrder, displayAdminOrder). Dane trzyma się w tabelach opisanych przez ObjectModel, a panel konfiguracji buduje getContent() z użyciem HelperForm. Struktura katalogów i kolejność wywołań hooków są opisane w dokumentacji deweloperskiej PrestaShop — warto zajrzeć choćby po to, żeby ocenić, czy wykonawca mówi o tym samym systemie.
Wtyczka WooCommerce to plik PHP z nagłówkiem Plugin Name, podpięty przez add_action() i add_filter(), komunikujący się z koszykiem i zamówieniem przez REST API (/wp-json/wc/v3/) albo klasy WC_Order i WC_Cart. Pułapka ostatnich lat: HPOS, czyli własne tabele zamówień w WooCommerce. Wtyczka napisana kilka lat temu, która czyta postmeta zamiast $order->get_meta(), po włączeniu HPOS po prostu przestaje widzieć dane.
Moduł to nie integracja. Integracja to wymiana danych z systemem zewnętrznym: InPost ShipX, DPD, Subiekt, Comarch Optima. Moduł to miejsce, w którym ta logika mieszka. Bez modułu nie ma gdzie zapisać numeru listu przewozowego ani statusu przesyłki; bez integracji moduł nie ma skąd wziąć tych danych.
/override/ ginie przy aktualizacji sklepu, a fork oznacza, że aktualizacje producenta przestają przychodzić.Uczciwa uwaga: nie każdy problem wymaga kodu. Zanim zamówisz moduł „gratis przy trzeciej sztuce”, sprawdź reguły koszyka — to często dwie godziny konfiguracji, nie dwadzieścia godzin pracy.
Decyzja sprowadza się do jednego pytania: czy to, czego potrzebujesz, da się kupić, czy trzeba napisać. Poniżej sygnały, które w praktyce rozstrzygają sprawę.
Pisz własne, gdy: logika jest Twoja i tylko Twoja — ceny B2B zależne od historii zamówień, indywidualne progi rabatowe per kontrahent, harmonogram dostaw ustalany ręcznie; dane muszą trafić do wewnętrznego systemu, do którego nie ma gotowego konektora; na rynku nie ma produktu, który robi choćby połowę tego, czego potrzebujesz.
Kup gotowe, gdy: wysyłka i płatności są standardowe, nie ma nietypowych reguł, a koszt wtyczki jest niższy niż 20 godzin pracy dewelopera. Oficjalne wtyczki bramek (Przelewy24, PayU, Stripe) i kurierów są aktualizowane po zmianach API — Ty tego nie utrzymujesz.
Sygnał ostrzegawczy: gotowa wtyczka robi 80% tego, czego potrzebujesz, a ostatnie 20% wymaga forka. Od tego momentu nie dostajesz aktualizacji producenta, a każda aktualizacja WooCommerce lub PrestaShop to ryzyko, że coś się rozsypie.
Przed zakupem sprawdź trzy rzeczy: datę ostatniej aktualizacji, liczbę aktywnych instalacji i deklarowane wsparcie (PHP 8.x, HPOS w WooCommerce).
Liczba godzin to najprostszy filtr: poniżej 20 h zwykle wygrywa gotowe rozwiązanie, 20–60 h to strefa modułu dedykowanego, powyżej 60 h warto najpierw zawęzić zakres do MVP. Jeśli pracujesz z zespołem w regionie, organizacja pracy przy niestandardowych modułach i wtyczkach w Lublinie wygląda podobnie — brief, etapy, odbiór.
Przykłady z praktyki: integracja z InPost ShipX (30–60 h), eksport i import ofert do ERP (40–80 h), konfigurator produktu B2B (60–120 h).
| Sytuacja | Rekomendacja | Dlaczego |
|---|---|---|
| Standardowa wysyłka krajowa, jedna strefa | Kup gotowe | Wtyczka 300–900 zł/rok vs 20+ h pracy dewelopera |
| Płatności online (Przelewy24, PayU, Stripe) | Kup gotowe | Oficjalne wtyczki nadążają za zmianami API |
| Ceny B2B zależne od historii zamówień | Pisz własne | Żadna wtyczka nie zna Twoich progów rabatowych |
| Dane muszą iść do wewnętrznego systemu | Pisz własne | Brak gotowego konektora, dane są tylko Twoje |
| Gotowa wtyczka pokrywa 80% potrzeb | Rozbuduj świadomie | Fork oznacza koniec aktualizacji producenta |
| Gratis po 3. sztuce, próg darmowej dostawy | Najpierw konfiguracja | Reguły koszyka i kody rabatowe załatwiają to bez kodu |
Rozliczaj za godziny pracy, nie za „wdrożenie”. Pozycja „wdrożenie modułu — 8000 zł” nie mówi nic o zakresie ani o tym, co się stanie, gdy po testach okaże się, że trzeba dopisać obsługę zwrotów.
Stawka godzinowa dewelopera w regionie lubelskim to realnie 120–170 zł/h netto przy mniejszych firmach i 200–250 zł/h netto przy specjalizacji (integracje ERP, moduły płatnicze). Widełki rynkowe domykają się w przedziale 120–250 zł/h netto.
Trzy typowe wyceny, które można porównać:
Doliczaj koszty ukryte: 10–20% budżetu na testy, dokumentację i wdrożenie na produkcji. Jeśli ktoś tego nie wpisał w ofertę, wpisze w fakturę później — jako „prace dodatkowe”.
TCO w praktyce. Subskrypcja wtyczki 300–900 zł/rok przez 5 lat to 1500–4500 zł, ale dostajesz aktualizacje i wsparcie. Moduł dedykowany za 45 h × 150 zł = 6750 zł to koszt jednorazowy plus utrzymanie raz na 2–3 lata — zwykle 5–15% wartości modułu rocznie, na samo utrzymanie zgodności z nową wersją PrestaShop lub PHP.
Kiedy zapłacisz podwójnie: gdy moduł został napisany bez dokumentacji i bez repozytorium. Kolejny wykonawca nie analizuje cudzego kodu za darmo — wycenia przepisanie od zera. Dlatego w umowie zapisz: repozytorium Git przekazane na Twoje konto, README z instalacją i konfiguracją, opis hooków i tabel, dane dostępowe w Twoim menedżerze haseł, płatność w etapach (np. 30/40/30) i zapis, że kod przechodzi na Twoją własność po zapłacie. Jak to wygląda krok po kroku poza Lublinem, opisujemy przy okazji organizacji pracy przy niestandardowych modułach i wtyczkach w Biłgoraju.
| Zakres | Godziny | Widełki przy 120–250 zł/h netto |
|---|---|---|
| Prosty moduł reguł dostawy lub rabatowych | ok. 20 h | 2 400 – 5 000 zł |
| Integracja kurierska: etykiety, statusy, tracking | 40–60 h | 4 800 – 15 000 zł |
| Synchronizacja z ERP w obie strony | 80–100 h | 9 600 – 25 000 zł |
| Testy, dokumentacja, wdrożenie na produkcji | +10–20% budżetu | dolicz do każdej pozycji powyżej |
Wdrożenie modułu do PrestaShop albo wtyczki do WooCommerce da się zamknąć w pięciu krokach. Każdy ma konkretny produkt na wyjściu — jeśli wykonawca go nie dostarcza, to sygnał ostrzegawczy.
Krok 1 — warsztat i brief. Dwie–trzy godziny z ludźmi, którzy realnie pracują w sklepie: handlowiec, magazyn, księgowość. Wypisujecie przypadki użycia („zamówienie powyżej 5 000 zł trafia do ręcznej weryfikacji"), dane wejściowe (ID zamówienia, status, kwota, metoda dostawy), dane wyjściowe (zapis do tabeli, e-mail, wpis w logu) i osoby decyzyjne po stronie klienta. Efekt: zakres MVP na jednej stronie A4. Bez tego każde „a dodajmy jeszcze" rozjeżdża budżet. Zasady porządkującej prace przy takich wdrożeniach trzymamy zwykle tak samo niezależnie od miasta — zobacz, jak opisujemy to na przykładzie organizacji pracy przy niestandardowych modułach w Lublinie.
Krok 2 — wycena w godzinach. Nie w dniach roboczych i nie w widełkach „od–do". Rozbicie na etapy plus osobna lista rzeczy poza zakresem: migracja starych danych, drugie API kurierskie, tłumaczenia, panel dla klienta.
Krok 3 — środowisko testowe. Kopia sklepu na stagingu z tymi samymi wersjami PHP (np. 8.1), MySQL/MariaDB, motywu i modułów co produkcja. Baza skopiowana z produkcji, ale z anonimizacją danych klientów. Bez tego test wydajności nic nie znaczy.
Krok 4 — krótkie iteracje. Demo co 1–2 tygodnie na stagingu, na realnych danych. Kod trafia do repozytorium Git należącego do klienta — nie wykonawcy. Jeśli deweloper wyjdzie z projektu, nie zostajesz z niczym.
Krok 5 — odbiór i wdrożenie. Deploy na produkcję poza godzinami ruchu, zawsze po kopii zapasowej plików i bazy. Dokumentacja powdrożeniowa: co robi moduł, jakie hooki obsługuje (np. actionValidateOrder, actionOrderStatusPostUpdate), gdzie leżą logi i jak go wyłączyć bezpiecznie. Nazwy hooków i sposoby ich rejestracji opisuje dokumentacja dla deweloperów PrestaShop.
| Etap | Co obejmuje | Typowy udział w budżecie |
|---|---|---|
| Analiza i brief | warsztat, zakres MVP, przypadki brzegowe | 10–15% |
| Kod | moduł, hooki, panel konfiguracji | 50–60% |
| Testy | staging, scenariusze brzegowe, wydajność | 15–20% |
| Wdrożenie | deploy, monitoring pierwszych 48 godzin | 5–10% |
| Dokumentacja | opis hooków, konfiguracja, procedura wyłączenia | 5% |
Sześć problemów wraca w niestandardowych modułach najczęściej. Każdy ma jednoznaczny sposób wykrycia — wystarczy zadać właściwe pytanie albo zajrzeć w logi.
error_log przejrzany po każdym scenariuszu.slow_query_log z long_query_time = 0.5.| Pułapka | Objaw w sklepie | Test wykrywający |
|---|---|---|
| Fork wtyczki | brak aktualizacji bezpieczeństwa | pytanie o źródło update'ów |
| PHP 8.x | biały ekran, wpisy deprecated | staging z pełnym logowaniem |
| Cache i szablony | działa po odświeżeniu, nie działa po czyszczeniu | wyczyść cache i powtórz test |
| N+1 | wolniejsze kategorie i koszyk | profilowanie + log wolnych zapytań |
| Błędy API | zamówienie zawieszone w połowie | symulacja 429 i timeoutu |
| Hardkod | zmiana wymaga dewelopera | edycja ustawienia w panelu |
Odbiór „na słowo" to najdroższy scenariusz. Poniższe testy możesz zlecić wykonawcy albo przejść sam na stagingu — każdy ma kryterium zaliczenia.
Scenariusze brzegowe. Puste pole wymagane, błędny kod pocztowy (00-000), zamówienie z 30 pozycjami, kod rabatowy 100%, zamówienie anulowane już po nadaniu etykiety, płatność odrzucona przez bramkę. Każdy przypadek zapisz w protokole z wynikiem „OK / błąd" i zrzutem ekranu.
Wydajność. Zmierz czas ładowania strony produktu i koszyka przed włączeniem modułu i po. Cel: różnica poniżej 100 ms. Powtórz pomiar trzy razy po wyczyszczeniu cache, a nie raz na rozgrzanym sklepie. Sposób mierzenia realnego doświadczenia użytkownika opisuje web.dev — Web Vitals. Jeśli moduł sam zaciąga dane z zewnątrz, sprawdź też, czy nie blokuje renderowania.
Aktualizacja platformy. Na kopii stagingu wykonaj aktualizację PrestaShop/WooCommerce do kolejnej wersji i przejdź te same scenariusze. Moduł napisany na hookach zwykle przeżyje — ten oparty na nadpisywaniu plików rdzenia prawie nigdy.
Test wyłączenia. Moduł musi dać się wyłączyć jednym kliknięciem bez błędów 500 w kolejce i bez psucia złożonych zamówień. Sprawdź to na stagingu: wyłącz, złóż zamówienie, włącz z powrotem.
Odbiór formalny. Protokół z listą przypadków testowych i wynikami, przekazane repozytorium Git, dokumentacja i dane dostępowe. Bez tego nie masz czego reklamować. Standard porządkowania tych kroków opisujemy też przy niestandardowych modułach i wtyczkach w Zwierzyńcu.
| Test | Co sprawdzamy | Kryterium zaliczenia |
|---|---|---|
| Brzegowe | puste pole, zły kod pocztowy, 30 pozycji, rabat 100% | brak błędów 500 i zawieszonych zamówień |
| Wydajność | czas produktu i koszyka przed/po włączeniu | różnica poniżej 100 ms |
| Aktualizacja | update platformy na stagingu | moduł działa bez ostrzeżeń deprecated |
| Wyłączenie | jedno kliknięcie w panelu | kolejka zamówień bez błędów 500 |
| Odbiór | protokół, repo, dokumentacja | komplet przekazany klientowi |
Moduł, który działa w dniu odbioru, nie działa wiecznie. PrestaShop i WooCommerce wydają nowe wersje, a hosting podnosi wersję PHP — kod napisany pod starsze środowisko potrafi wywalić błąd 500 przy pierwszej aktualizacji. Dlatego roczny koszt utrzymania modułu przyjmuje się na 10–20% wartości wdrożenia. Moduł za 6 000 zł to 600–1 200 zł rocznie: aktualizacje pod nowe wersje platformy i PHP, testy na kopii sklepu, poprawki po zmianach w API zewnętrznym.
/modules lub /wp-content/plugins. Najpierw staging, potem produkcja. Retencja kopii minimum 30 dni i trzymanie ich poza serwerem produkcyjnym — kopia na tym samym dysku nie jest kopią./var/logs, dodatkowo error_log PHP) plus cron pilnujący kolejki synchronizacji z ERP lub kurierem. Alert mailem albo SMS-em, gdy zadanie zwróci błąd lub API odpowie kodem 4xx/5xx.Zakres SLA zapisujemy w umowie, nie w mailu — to najczęstszy punkt sporny przy awarii.
Zmiany zakresu po wdrożeniu. Nowa funkcja to nowa wycena godzinowa, a nie „drobna poprawka” robiona po godzinach. Bez tego po pół roku nikt nie wie, ile moduł naprawdę kosztował. Jeśli koszt łatanie modułu pod nową architekturę platformy przekracza 30–40% pierwotnego wdrożenia, taniej jest przepisać go od zera niż poprawiać co kwartał. Zakres zmian śledzimy w dokumentacji dla deweloperów PrestaShop, a schemat organizacji pracy przy takich projektach opisujemy w materiale o organizacji pracy przy niestandardowych modułach.
| Typ zgłoszenia | Czas reakcji | Przykład |
|---|---|---|
| Krytyczna | 2 h w godzinach pracy (8:00–16:00) | Błąd 500 po aktualizacji, stanęła kolejka zamówień do ERP |
| Wysoka | 1 dzień roboczy | Błędne mapowanie statusów zamówień, brak jednego przewoźnika |
| Zwykła | 1–2 dni robocze | Zmiana etykiety w panelu, literówka w szablonie maila |
| Rozwój / nowa funkcja | osobna wycena, termin po akceptacji | Dodanie kolejnego API kuriera do integracji |
Bełżec, Tomaszów Lubelski, Zamość — odległość nie zmienia procesu. Moduł zamawia się tak samo zdalnie, o ile na starcie jest brief na piśmie: cel, użytkownicy, przebieg procesu, integracje, kto odbiera pracę. Do tego demo online na działającym stagingu i jedno miejsce na zgłoszenia, zamiast wątku mailowego z dziesięcioma odpowiadającymi.
.env poza repozytorium.Kiedy warto spotkać się na miejscu: warsztat zbierający wymagania (2–4 h), szkolenie pracowników z panelu modułu, odbiór przy sklepie z osobami, które będą go używać na co dzień. Poza tymi trzema sytuacjami dojazd nie wnosi nic poza kosztem.
Rozmowa bezpośrednio z deweloperem, bez pośredników, skraca drogę od zgłoszenia do poprawki — problem nie jest tłumaczony trzeci raz przez kolejną osobę.
Realistyczne terminy: prosty moduł 1–2 tygodnie, średni 3–5 tygodni, integracja z ERP 6–10 tygodni. Podobnie pracujemy z firmami z Józefowa i z Krasnobrodu — proces jest identyczny, różni się tylko miejsce odbioru.
| Zakres | Realistyczny czas | Co wydłuża termin |
|---|---|---|
| Prosty moduł: dodatkowe pole, przelicznik, walidacja NIP | 1–2 tygodnie | Brak dostępu do stagingu, zmiany wymagań w trakcie |
| Średni: własny panel, logika rabatowa, 2–3 integracje | 3–5 tygodni | Brak dokumentacji API po stronie dostawcy |
| Integracja z ERP lub wielokanałowa synchronizacja | 6–10 tygodni | Czas po stronie klienta na testy i uzgodnienie mapowania pól |
Zamawianie modułu bez spisanego zakresu i kryteriów akceptacji
Jak wykryć: Wykonawca po raz kolejny dopytuje o te same funkcje, a w mailach nie ma jednego dokumentu z listą funkcji i przypadków brzegowych.
Jak naprawić: Napisz brief: lista funkcji, co ma się dziać przy błędzie, jakie dane wchodzą i wychodzą, jak wygląda odbiór. Podpiszcie go przed startem prac.
Fork gotowej wtyczki, żeby dorobić ostatnie 20% funkcji
Jak wykryć: W plikach wtyczki producenta są Wasze zmiany, a każda aktualizacja wymaga ręcznego scalania albo nadpisuje poprawki.
Jak naprawić: Zamiast forka zrób osobny moduł lub wtyczkę rozszerzającą, korzystającą z hooków i filtrów. Jeśli to niemożliwe, policz koszt utrzymania forka i zaakceptuj go świadomie.
Brak repozytorium i dokumentacji po wdrożeniu
Jak wykryć: Kod przyszedł w ZIP-ie na maila, nie masz dostępu do repozytorium, a na pytanie o hooki nikt nie umie odpowiedzieć.
Jak naprawić: Wpisz do umowy przekazanie repozytorium Git, README z opisem hooków i ustawień oraz dostępów przy odbiorze prac.
Testowanie modułu bezpośrednio na produkcji
Jak wykryć: Nie ma środowiska staging ani kopii bazy, a każda poprawka ląduje od razu w działającym sklepie.
Jak naprawić: Postaw staging z kopią bazy i plików. Przetestuj co najmniej: nowe zamówienie, płatność, etykietę kurierską, anulowanie, zwrot i zamówienie z rabatem B2B.
Modyfikowanie plików core zamiast modułu lub wtyczki
Jak wykryć: Zmiany są w plikach silnika sklepu, a po aktualizacji PrestaShop lub WooCommerce funkcja znika.
Jak naprawić: Przenieś logikę do modułu lub wtyczki, a wygląd zmieniaj przez nadpisanie szablonu w motywie child. Zmiany w core traktuj jako dług do spłaty.
Rozliczanie za wdrożenie bez rozbicia na godziny
Jak wykryć: Oferta zawiera jedną kwotę i żadnej estymacji godzinowej ani stawki.
Jak naprawić: Poproś o rozbicie na zadania z liczbą godzin i stawką netto. Przy zmianach zakresu będziesz wiedzieć, ile realnie dopłacasz.
Organizacja pracy przy niestandardowych modułach i wtyczkach waży więcej niż sam kod. Największe oszczędności nie wynikają z tańszej stawki, ale z jasnego zakresu, repozytorium po Twojej stronie i testów na stagingu przed produkcją. Zanim podpiszesz umowę, ustal estymację godzinową i kryteria odbioru — to one decydują, czy moduł będzie kosztował raz, czy trzy razy. Podobne zasady porządkujemy przy wdrożeniach w innych miastach regionu, na przykład w materiałach o niestandardowych modułach i wtyczkach w Zwierzyńcu.
Moduł PrestaShop to katalog w /modules z plikiem głównym, klasą dziedziczącą po Module i rejestracją hooków; często korzysta też z ObjectModel do zapisu danych. Wtyczka WooCommerce to plik PHP w WordPress, który podpina się pod hooki i filtry, a dane wymienia przez REST API lub tabele z obsługą HPOS. Szczegóły techniczne znajdziesz w dokumentacji dla deweloperów PrestaShop. Dla Twojej decyzji różnica jest jedna: moduł i wtyczka to kod w sklepie, integracja to sposób rozmowy z systemem zewnętrznym.
Cena zależy od liczby godzin, nie od nazwy funkcji. Realne widełki stawek deweloperskich to dziś 120–250 zł/h netto. Prosty moduł reguł dostawy to około 20 godzin, integracja kurierska z etykietami i statusami 30–60 godzin, a synchronizacja z ERP w obie strony 40–90 godzin. Do tego dolicz 10–20% budżetu na testy, dokumentację i wdrożenie na produkcji.
Jeśli logika jest standardowa — typowa wysyłka, typowe płatności, brak nietypowych progów rabatowych — gotowe rozwiązanie zwykle wygrywa, bo jego koszt jest niższy niż 20 godzin pracy dewelopera. Pisz własne, gdy logika jest specyficzna dla firmy: ceny B2B zależne od historii zamówień, indywidualne progi rabatowe, integracja z wewnętrznym systemem bez sensownej alternatywy na rynku. Uwaga na wtyczki, które robią 80% tego, czego potrzebujesz — ostatnie 20% często kończy się forkiem i utratą aktualizacji producenta.
Lista funkcji, opis przypadków brzegowych, przykłady danych wejściowych i wyjściowych, informacja o systemach, z którymi moduł ma się łączyć, oraz kryteria odbioru. Warto dopisać, kto po stronie firmy podejmuje decyzje o zakresie. Brief nie musi być długi, ale musi być jednym dokumentem — nie dziesięcioma mailami.
Może, jeśli moduł korzysta z hooków lub API, które zmieniły się w nowej wersji. Dlatego każdą aktualizację silnika testuj najpierw na stagingu z kopią bazy. Warto mieć w repozytorium notatkę, z których hooków i metod korzysta moduł — wtedy sprawdzenie zgodności zajmuje minuty, a nie dni. Rób też backup przed każdą aktualizacją, nie tylko przed wdrożeniem modułu.
Tak i to zwykle dobry pomysł. Przy zakresie powyżej 60 godzin warto najpierw zawęzić go do MVP: jedna integracja, jeden scenariusz, jeden typ zamówienia. Resztę dodajecie po tym, jak pierwsza wersja działa na produkcji i macie realne dane. To zmniejsza ryzyko przepisania połowy modułu po zmianie założeń.
Ty. Kod modułu powinien trafić do repozytorium, do którego masz dostęp niezależnie od tego, kto go pisze. Bez tego kolejny wykonawca wyceni przepisanie od zera, a nie poprawkę. Warto też uregulować w umowie kwestię praw autorskich majątkowych i pól eksploatacji — jeśli tego nie ma, w razie sporu zostajesz z kodem, którego nie możesz swobodnie rozwijać.
Jeśli nie wiesz, czy w Twoim sklepie wystarczy konfiguracja, rozbudowa gotowego modułu, czy trzeba pisać od zera — opisz krótko problem i wyślij. Powiemy wprost, co ma sens, a czego nie warto robić.