Własny moduł do PrestaShop albo wtyczka do WordPressa to nie jednorazowy zakup, tylko element, który przez lata będzie pracował w firmie. Dlatego porządek wokół niego waży tyle samo co sam kod. Poniżej zbieramy stronę organizacyjną: kto za co odpowiada, gdzie leży kod, jak wyglądają środowiska i co sprawdzić przed odbiorem. Bez tego nawet dobrze napisany moduł po dwóch aktualizacjach staje się funkcją, której nikt nie chce dotykać.
Moduł w PrestaShop to katalog z plikami PHP, w którym główna klasa dziedziczy po klasie Module. Sklep wykrywa taki katalog, rejestruje go i uruchamia w wybranych hookach – na przykład displayHeader, actionCartSave albo displayAdminOrder. Wtyczka w WordPress to katalog w wp-content/plugins z plikiem głównym opatrzonym nagłówkiem Plugin Name, który podpina się do akcji i filtrów przez add_action i add_filter. Tyle wystarczy, żeby wiedzieć, o czym rozmawiamy: to rozszerzenie funkcji sklepu albo strony, nic więcej.
Różnica nie siedzi w definicji, tylko w tym, co kod ma robić. Konfiguracja gotowej wtyczki to przestawienie opcji, które przewidział autor. Obejście to dopisanie kilkunastu linii w functions.php, w szablonie .tpl albo przez plugin typu Code Snippets – działa do pierwszej aktualizacji. Kod pisany pod proces firmy to trzecia kategoria.
Przykład z praktyki: sklep z materiałami budowlanymi ma cennik dostawy zależny od tabeli gabarytów paletowych i strefy dojazdu. Gotowe wtyczki liczą wagę albo wartość koszyka. Moduł pisany pod proces pobiera wymiary z atrybutów produktu, sprawdza tabelę i dolicza transport w koszyku. Drugi przykład: moduł, który przy zmianie statusu zamówienia wysyła dokument do ERP i odbiera numer faktury. Gotowiec tego nie zrobi, bo ERP w firmie jest zwykle jeden i nietypowy.
Zanim cokolwiek zamówisz, przeczytaj materiał o porządku pracy wokół niestandardowych modułów i wtyczek – bez repozytorium, środowiska testowego i dokumentacji custom kod staje się czarną skrzynką. Strukturę modułów i hooki opisuje dokumentacja dla deweloperów PrestaShop.
Pięć sygnałów, że gotowa wtyczka nie dowiezie:
Test trzech obejść. Policz, ile dodatkowych wtyczek i hacków trzeba dołożyć, żeby gotowiec zrobił to, czego potrzebujesz. Jeśli wychodzą trzy i więcej, kolejna aktualizacja jednej zepsuje drugą. Wtedy custom jest tańszy w utrzymaniu, nawet jeśli sam projekt kosztuje dwa–trzy razy więcej niż licencje.
Kiedy zostać przy gotowcu: standardowa wysyłka kurierem z płaską stawką, prosty newsletter, galeria zdjęć, podstawowe płatności online, formularz kontaktowy z zapisem zgód. Tu nie ma czego pisać – wtyczka za 200–500 zł rocznie zrobi to szybciej i taniej niż zespół.
Jak ułożyć odpowiedzialność, repozytorium i przekazanie kodu, opisujemy w sekcji o organizacji wdrożenia modułów i wtyczek dla firmy.
Stawka godzinowa doświadczonego dewelopera w Polsce to 120–220 zł netto. 120–150 zł to poziom kogoś z krótszym stażem integracyjnym, 160–190 zł to standard dla osoby, która robi moduły od kilku lat, 200–220 zł płacisz przy nietypowych integracjach (ERP, magazyn, drukarki fiskalne) albo za konsultację architektoniczną. Wycena agencji zaczyna się wyżej, ale w cenie masz testy, wdrożenie na produkcji i wsparcie po odbiorze.
| Zakres | Godziny | Koszt netto przy 120–220 zł/h |
|---|---|---|
| Prosty moduł: jeden hook, jedna funkcja (np. dopłata za płatność) | 20–40 h | 2 400–8 800 zł |
| Średni: panel w back office, kilka warunków, jeden endpoint API | 40–100 h | 4 800–22 000 zł |
| Złożony: integracja ERP, stany magazynowe, mapowanie dokumentów | 100–250 h | 12 000–55 000 zł |
| Poprawki po aktualizacji, audyt istniejącego kodu, migracja na nową wersję | 8–40 h | 960–8 800 zł |
Wdrożenie własnego modułu da się rozłożyć na siedem etapów, a każdy kończy się decyzją albo dokumentem. Dzięki temu w każdej chwili wiadomo, co jest zrobione, co czeka na klienta i ile zostało do końca.
Po stronie klienta zostają cztery rzeczy: dostępy (hosting, SFTP, baza, panel płatności i kuriera), dane testowe, opis procesu tak, jak wygląda dziś, oraz decyzje biznesowe — np. czy stan magazynowy schodzi w momencie złożenia zamówienia czy zaksięgowania płatności. Realny czas klienta to zwykle 2–5 godzin na etap, głównie na konsultacje i testy.
Przed wdrożeniem przechodzimy listę kontrolną: czy moduł działa na kopii z danymi produkcyjnymi, czy zdarzenia trafiają do logów, czy nie zapisuje niczego poza własnymi tabelami. Dopiero potem odbiór — lista kontrolna podpisana przez obie strony, dokumentacja instalacji i konfiguracji oraz przekazanie praw do kodu i repozytorium. Bez przekazania praw przy zmianie wykonawcy zostajecie z kodem, którego nikt nie może legalnie rozwijać. Warto też od razu ustalić, gdzie leży kod i kto ma do niego dostęp — dobrze opisuje to tekst o porządku pracy przy modułach i wtyczkach Zwierzyniec, a sposób rozbicia prac na pozycje znajdziesz w materiale o cenniku i organizacji wyceny modułów.
| Etap | Co dostarcza klient | Czas klienta |
|---|---|---|
| 1. Analiza potrzeb | opis procesu, przykłady wyjątków | 1–2 h |
| 2. Specyfikacja | akceptacja zakresu, decyzje | 1 h |
| 3. Wycena godzinowa | akceptacja wyceny | 0,5 h |
| 4. Development na kopii | dostępy, dane testowe | 0,5 h |
| 5. Testy | wykonanie scenariuszy, zgłoszenie błędów | 2–3 h |
| 6. Wdrożenie na produkcję | okno czasowe, zgoda na start | 0,5 h |
| 7. Opieka i monitoring | zgłoszenia, kontakt techniczny | według potrzeb |
Custom moduł najczęściej zamawia się przy trzech typach integracji. Każda ma inny zestaw pułapek, ale efekt jest ten sam: albo dane się zgadzają, albo dział obsługi pracuje ręcznie.
ERP. Subiekt GT/ne, Comarch Optima i WF-Mag to najczęstsze systemy w polskich firmach. Zakres mapowania: stany magazynowe, ceny (w tym promocje i grupy klientów), zamówienia i statusy. Pierwsza decyzja przed kodowaniem: kto jest źródłem prawdy. Jeśli stany trzyma Subiekt, a sklep sprzedaje równolegle, potrzebna jest synchronizacja co 5–15 minut i blokada sprzedaży przy stanie zero. Uwaga na jednostki miary, stawki VAT i kody EAN — bez uzgodnienia mapowania moduł pomiesza połowę asortymentu.
Płatności. Przelewy24, PayU, Stripe. Kluczowe są webhooki: to zwykłe żądania HTTP POST wysyłane przez operatora, na które moduł musi odpowiedzieć kodem 200. Status zamówienia zmieniamy wyłącznie po potwierdzeniu z API, nigdy po samym powrocie klienta na stronę. Do tego idempotencja — ten sam callback może przyjść dwa razy i nie może zdublować zamówienia — oraz obsługa płatności nieudanych i zwrotów.
Kurierzy. InPost, DPD, DHL: generowanie etykiet, statusy przesyłek, punkty odbioru (Paczkomaty przez API) oraz gabaryty i waga, które decydują o cenie. Etykieta wygenerowana bez wagi bywa odrzucana przy nadaniu.
Największa pułapka nie leży w samym API, tylko w braku kolejki i logów. Każde wywołanie powinno trafić do kolejki, zapisać request i odpowiedź, a przy błędzie ponowić próbę z odstępem. Przed odbiorem robimy test na 100 i więcej zamówieniach i włączamy monitoring błędów API, żeby dowiedzieć się o awarii szybciej niż klient. Ogólne zasady komunikacji po HTTP opisuje dokumentacja MDN Web Docs – HTTP. Sposób ułożenia takich integracji w większym wdrożeniu pokazuje materiał o organizacji pracy przy niestandardowych modułach i wtyczkach.
| Integracja | Co synchronizujemy | Najczęstsza pułapka |
|---|---|---|
| ERP: Subiekt GT/ne, Comarch Optima, WF-Mag | stany, ceny, zamówienia, statusy | brak ustalonego źródła prawdy dla stanów |
| Płatności: Przelewy24, PayU, Stripe | statusy transakcji, zwroty | brak idempotencji — podwójny webhook dubluje zamówienie |
| Kurierzy: InPost, DPD, DHL | etykiety, statusy przesyłek, punkty odbioru | brak wagi i gabarytów — etykieta odrzucona przy nadaniu |
Custom moduł to zobowiązanie na lata. O tym, czy po dwóch latach nadal da się go utrzymać, decydują trzy obszary.
Aktualizacje. PHP wychodzi z fazy wsparcia co roku, WordPress kilka razy w roku, PrestaShop rzadziej, ale też regularnie. Moduł napisany na PHP 7.4 przestaje działać po podniesieniu do 8.2 — najczęściej przez dynamiczne właściwości i przestarzałe funkcje. Zakładamy więc przegląd kompatybilności przy każdej większej aktualizacji platformy, a nie dopiero wtedy, gdy sklep przestanie działać. Wymagania dotyczące struktury modułu znajdziesz w dokumentacji dla deweloperów PrestaShop.
Bezpieczeństwo. Walidacja i sanityzacja danych wejściowych, escaping na wyjściu, tokeny (nonce w WordPressie) w formularzach i żądaniach administracyjnych, sprawdzanie uprawnień użytkownika. Żadnych zapytań SQL sklejanych ze zmiennych — wyłącznie zapytania parametryzowane. Lista OWASP Top 10 to dobry punkt wyjścia do przeglądu przed odbiorem; w praktyce najczęstsze dziury to brak sprawdzenia uprawnień w endpointach AJAX i wyciek danych przez zbyt szczegółowe logi.
Wydajność. Cache dla powtarzalnych zapytań, kolejki dla zadań w tle, indeksy na własnych tabelach, świadomość limitów API (np. liczby zapytań na minutę u kuriera). Test obciążeniowy robimy na kopii: 50 równoległych użytkowników potrafi pokazać problem, którego nie widać przy jednym testerze.
Opieka. SLA z zapisanym czasem reakcji, automatyczne kopie zapasowe bazy i plików, monitoring dostępności i błędów oraz procedura rollback: poprzednia wersja kodu w repozytorium, kopia bazy sprzed wdrożenia, opisany krok po kroku powrót. Bez tego każda awaria to gaszenie pożaru na produkcji. Zakres i stawkę takiej opieki najlepiej ustalić przed startem prac — pomaga w tym zestawienie kosztu utrzymania modułu na zamówienie.
| Obszar | Co sprawdzić | Jak często |
|---|---|---|
| Aktualizacje | zgodność z nową wersją PHP i platformy | przy każdej większej aktualizacji |
| Bezpieczeństwo | walidacja, escaping, uprawnienia, zapytania SQL | raz w roku i przed odbiorem |
| Wydajność | cache, kolejki, indeksy, limity API | po wzroście ruchu lub liczby zamówień |
| Opieka | SLA, kopie zapasowe, monitoring, rollback | stale, przegląd kwartalny |
Zanim podpiszesz umowę na moduł do PrestaShop albo wtyczkę do WordPressa, zadaj pięć pytań. Pierwsze: czy pracuję bezpośrednio z deweloperem, czy przez pośrednika? W praktyce różnica to 20–40% wyższa stawka i dłuższa droga komunikatu, gdy coś nie działa. Drugie: czy w cenie dostanę pełny kod źródłowy i dokumentację? Zapis w umowie powinien mówić o repozytorium Git (GitHub, GitLab, Bitbucket) przekazanym na Twoje konto firmowe, a nie o „dostępie do plików na serwerze wykonawcy”. Trzecie: czy jest opieka po wdrożeniu — minimum 30 dni gwarancji na błędy i płatny pakiet utrzymaniowy z określoną liczbą godzin miesięcznie. Czwarte: jakie SLA? Konkretnie: reakcja do 4 godzin w dni robocze przy awarii blokującej zamówienia, do 2 dni roboczych przy błędach kosmetycznych. Piąte: kto aktualizuje moduł, gdy wyjdzie PrestaShop 8.x albo WordPress 6.x i czy testy kompatybilności są w pakiecie.
Drugi krok to przegląd dowodów, nie deklaracji. Poproś o dwie realizacje z podobnego zakresu i o numery wersji systemu, na których pracują. Zapytaj, jak wyglądał ich ostatni rollback i ile trwał. Sprawdź, czy podają cenę za etap, czy jedną kwotę „za całość” — ta druga prawie zawsze kończy się dopłatami.
| Pytanie do wykonawcy | Dobra odpowiedź | Czerwona flaga |
|---|---|---|
| Praca bezpośrednia czy podwykonawstwo | Rozmawiasz z osobą, która pisze kod | „To już szczegóły naszego zespołu” |
| Kod i dokumentacja | Repo Git na Twoim koncie + instrukcja instalacji | „Kod zostaje u nas, dostajesz działającą stronę” |
| Opieka po wdrożeniu | 30 dni gwarancji + pakiet godzinowy | Temat nie pojawia się w ofercie |
| SLA | Reakcja 4 h, naprawa 24–48 h | „Zajmiemy się, gdy będzie czas” |
| Aktualizacje | Plan testów przy nowych wersjach | „Na razie nie ma takiej potrzeby” |
Lokalność nie jest sentymentem, tylko rachunkiem. Wykonawca z Zamościa lub Zwierzyńca dojeżdża na miejsce w 30–60 minut, co przy pilnym wdrożeniu na produkcji ma wymierną wartość. Rozumie też realia lubelskiego rynku: sezonowość, lokalnych dostawców, sposoby rozliczeń. Jeśli porównujesz oferty z innych miast, zobacz, jak wygląda organizacja pracy przy niestandardowych modułach i wtyczkach dla firm ze Szczebrzeszyna oraz jak kształtują się ceny niestandardowych modułów w Zamościu.
Wydrukuj tę listę i przejdź po niej z wykonawcą punkt po punkcie. Czternaście pozycji, każda zamknięta na „tak” albo „nie”.
| Obszar | Minimalny standard | Gdzie to zapisać |
|---|---|---|
| Proces | Specyfikacja + protokół odbioru | Umowa, załącznik 1 |
| Budżet | Podział na etapy, limit poprawek | Umowa, harmonogram płatności |
| Czas | Konkretne daty kamieni milowych | Harmonogram |
| Dostępy | Repozytorium i konta po Twojej stronie | Załącznik techniczny |
| Testy | Staging, mobile, płatności, wydajność | Protokół odbioru |
| Dokumentacja | Instrukcja instalacji i konfiguracji | Przekazanie końcowe |
| Opieka | Gwarancja i pakiet godzin | SLA w umowie |
Jeśli trzy lub więcej punktów wypada na „nie”, wstrzymaj wdrożenie i doprecyzuj zakres. Podpisanie umowy z takim zestawem luk kosztuje później więcej niż dwa tygodnie zwłoki. Zasady porządkowe opisujemy szerzej w materiałach o tym, jak wygląda porządek pracy przy niestandardowych modułach i wtyczkach w Zwierzyńcu.
Prosty moduł liczący nietypową regułę dostawy to zwykle kilka dni pracy. Integracja z zewnętrznym API, magazynem albo systemem księgowym to 40–120 godzin. Rozstrzał wynika z liczby integracji i przypadków brzegowych, dlatego wycenę wartą rozmowy dostaniesz dopiero po specyfikacji. Sposób kalkulacji i podział na etapy opisujemy w materiale o koszcie i organizacji modułów w Zamościu.
Mały moduł: 3–5 dni roboczych od zatwierdzenia specyfikacji. Średnia integracja: 2–4 tygodnie. Duży moduł z panelem administracyjnym i wieloma integracjami: 6–10 tygodni. Do tego doliczyć trzeba 2–5 dni na testy na kopii sklepu i tyle samo na wdrożenie na produkcję.
Tak, pod trzema warunkami: kod przechodzi przegląd pod kątem typowych luk (SQL injection, XSS, brak walidacji uprawnień), nie zapisuje danych wrażliwych w logach, a cała komunikacja idzie po HTTPS. Poproś o raport z testów i o informację, gdzie moduł trzyma dane — czy w osobnej tabeli, czy dopisuje kolumny do tabel systemowych.
Wybór zależy od tego, co już masz i jak skomplikowany jest katalog. PrestaShop lepiej znosi tysiące SKU, kombinacje produktów i zaawansowane ceny. WooCommerce wygrywa, gdy liczy się prostota edycji treści i integracje z wtyczkami marketingowymi. Moduł piszemy pod strukturę, w której ma pracować — nie przenosimy jeden do jednego.
To ta sama idea, inna nazwa i inna struktura kodu. W PrestaShop mówimy o module (katalog, klasa główna, plik konfiguracyjny XML), w WordPressie o wtyczce (plik główny z nagłówkiem, hooki, akcje i filtry). Skutek dla firmy jest identyczny: jedna funkcja, jedno miejsce do aktualizacji i jeden właściciel odpowiedzialny za kod.
Minimum to 30 dni gwarancji na błędy popełnione przy tworzeniu modułu. Sensowny standard to pakiet utrzymaniowy: aktualizacje kompatybilności, monitoring błędów w logach i reakcja w ciągu 4 godzin przy awarii blokującej sprzedaż. Bez tego każda aktualizacja sklepu staje się ryzykiem.
Start prac bez specyfikacji i kryteriów odbioru
Jak wykryć: Zespół dopytuje o szczegóły procesu już w trakcie kodowania, a decyzje zapadają w mailach i na czacie. Nie ma dokumentu, który mówi, co moduł ma robić i kiedy uznajemy go za gotowy.
Jak naprawić: Przed pierwszym commitem spisz jednostronicową specyfikację: proces krok po kroku, integracje, dane wejściowe i wyjściowe oraz listę scenariuszy testowych. Dopiero na tej podstawie licz godziny.
Zmiany w plikach rdzenia platformy albo w cudzej wtyczce
Jak wykryć: Po aktualizacji PrestaShop lub WordPressa funkcja przestaje działać albo wraca do stanu sprzed zmian. W repozytorium widać pliki spoza katalogu własnego modułu.
Jak naprawić: Przenieś logikę do własnego modułu i podłącz ją hookami, a w motywie używaj child theme. Struktura modułu w PrestaShop jest opisana w dokumentacji deweloperskiej: https://devdocs.prestashop-project.org/
Praca bezpośrednio na produkcji
Jak wykryć: Nie ma kopii sklepu do testów, a klient dowiaduje się o zmianach z błędów na stronie. Każde wgranie plików to ryzyko przestoju sprzedaży.
Jak naprawić: Postaw środowisko testowe na kopii bazy i plików, testy rób tam, a na produkcję wypuszczaj dopiero wersję po odbiorze. Osobne klucze API dla testów i produkcji.
Kod istnieje tylko na FTP jednej osoby
Jak wykryć: Nikt poza wykonawcą nie umie wskazać, gdzie leży kod i jak go uruchomić. Brak repozytorium, brak opisu instalacji, dostępy na prywatne konto.
Jak naprawić: Repozytorium Git na firmowym koncie, dostępy przekazane na firmowe skrzynki, README z opisem instalacji i konfiguracji. To warunek dalszego rozwoju i przekazania praw.
Wtyczkowy zwierzyniec, czyli kilka dodatków robiących to samo
Jak wykryć: Jedną funkcję obsługuje kilka wtyczek, część się nakłada. Rośnie liczba konfliktów, a strona zwalnia. Sprawdź to pomiarem Core Web Vitals: https://developers.google.com/search/docs/appearance/core-web-vitals
Jak naprawić: Zrób audyt: wypisz wtyczki, ich zadania i to, czy są jeszcze używane. Jeśli trzy dodatki i dwa hacki obsługują jeden proces, policz koszt customu i porównaj z kosztem utrzymania.
Brak właściciela po stronie firmy i planu na aktualizacje
Jak wykryć: Nie wiadomo, kto zatwierdza zmiany, kto sprawdza działanie po aktualizacji i do kogo zgłosić błąd. Aktualizacje robi się przypadkiem, bez kopii zapasowej.
Jak naprawić: Wyznacz jedną osobę decyzyjną po stronie firmy i ustal harmonogram: przegląd wtyczek raz na kwartał, kopia zapasowa przed każdą aktualizacją, okno serwisowe poza szczytem sprzedaży.
Niestandardowy moduł albo wtyczka to projekt, który trzeba prowadzić jak każdy inny: ze specyfikacją, środowiskiem testowym, repozytorium i wyznaczoną osobą decyzyjną. Stawka 120–220 zł netto za godzinę brzmi wysoko, dopóki nie policzysz godzin ręcznej pracy i rocznych licencji, które custom zastępuje. Największe ryzyko nie leży w kodzie, tylko w braku właściciela i planu na aktualizacje. Dlatego zanim zamówisz moduł, uporządkuj to, co już masz.
Od inwentaryzacji. Wypisz wszystkie aktywne wtyczki i moduły, dopisz do każdego zadanie, którego nie da się zastąpić innym dodatkiem, oraz osobę, która wie, jak go skonfigurowano. Dopiero potem decyduj, co zostaje, co idzie do usunięcia, a co wymaga własnego kodu. Kolejność pracy opisujemy szerzej tutaj: https://dropdigital.pl/niestandardowe-moduly-i-wtyczki-zwierzyniec
Nie, jeśli firma ma być niezależna. Repozytorium powinno stać na firmowym koncie, a dostępy do serwera, bazy i paneli płatności na firmowych skrzynkach. Wtedy zmiana wykonawcy to kwestia przekazania dostępów, a nie odtwarzania projektu od zera. Uporządkowanie tego po fakcie bywa droższe niż samo wdrożenie. Podobne wnioski z innych projektów zbieramy tutaj: https://dropdigital.pl/niestandardowe-moduly-i-wtyczki-zamosc-organizacja
Realnie 2–5 godzin na etap, czyli analizę, odbiór testów i wdrożenie. To nie jest cały projekt, tylko momenty, w których potrzebna jest decyzja biznesowa albo dane testowe. Jeśli klient nie ma czasu na żaden z tych etapów, harmonogram się rozjeżdża niezależnie od tempa programisty.
Najczęściej w 6–18 miesięcy, licząc koszt rocznych licencji, dodatkowych wtyczek i ręcznej pracy, którą zastępuje. Im więcej ręcznego przepisywania zamówień czy generowania etykiet, tym szybciej. Wyliczenia i widełki godzinowe pokazujemy tutaj: https://dropdigital.pl/niestandardowe-moduly-i-wtyczki-zamosc-koszt-organizacja
Tak i trzeba to zaplanować. Zmiany w API platformy, nowsza wersja PHP albo zmiana zachowania hooka potrafią wyłączyć funkcję. Dlatego każdy moduł ma mieć wskazaną wersję, na której był testowany, oraz scenariusz sprawdzenia po aktualizacji. Aktualizację robi się na kopii, nie na produkcji.
To zależy wyłącznie od umowy. Zapisz w niej przed startem, czy prawa majątkowe do kodu przechodzą na firmę, czy dostajesz licencję na korzystanie. Poproś też o informację, czy moduł korzysta z bibliotek zewnętrznych i na jakich licencjach. Ustalenie tego po odbiorze jest trudne i kosztowne.
Jeśli chcesz sprawdzić, które moduły i wtyczki w Twoim sklepie lub na stronie faktycznie pracują na wynik, a które tylko generują koszt, napisz do nas. Zaczynamy od krótkiej rozmowy i audytu, nie od wyceny z sufitu. W sprawach lokalnych: https://dropdigital.pl/niestandardowe-moduly-i-wtyczki-szczebrzeszyn-dla-firmy