helban.dev

Nowa strona kursu NUDDA na LearnDashu, a stara w odwodzie, gdyby trzeba było wrócić

Antonio Faedda uczy NUDDA Dirty Boxing od 2006 roku. Jego kurs online, Foundation Course, to pierwszy krok dla każdego, kto chce tej metody uczyć. Stara strona stała na WordPressie z motywem Astra, Elementorem, WooCommerce i LearnDashem. Włączonych wtyczek było 28. Antonio chciał nowej, postawionej od zera, na której kurs da się kupić i opłacić bez niczyjej pomocy. 1 października 2026 nowa strona przejęła adres nudda.com, a starą odłożyłem na serwerze w całości, jako drogę powrotu.

Rola: budowa, płatności, przełączenie Stack: WordPress · LearnDash 5.2 · Elementor · PHP 8.3 · Stripe Klient: nudda.com
6 / 6
kont dawnych kupujących przeniesionych razem z hasłami (01.10.2026)
14 / 14
kontroli po przełączeniu, powtarzanych po każdym kolejnym wdrożeniu
97–98
PageSpeed strony głównej na telefonie (dwa pomiary, 02.10.2026)
Punkt wyjścia

Trzy kursy schowane za sklepem

Stara strona sprzedawała trzy osobne kursy przez WooCommerce. Zakup w sklepie nadawał kupującemu rolę użytkownika i dopiero ta rola otwierała lekcje w LearnDashu. Każda sprzedaż przechodziła więc przez dwa sklejone ze sobą systemy.

Antonio postanowił połączyć trzy kursy w jeden, podzielony na części, i sprzedawać go prosto z LearnDasha, bez sklepu pośrodku. Zlecenie było krótkie: czysta, szybka strona od zera, na LearnDashu i Elementorze, z płatnościami, które działają bez jego udziału.

Co widzi kupujący

Jedna strona, jedno pole zgody i karta, bez zakładania konta

Strona kursu kończy się panelem zakupu: status zapisu, cena i jedno pole do zaznaczenia. Zaznaczając je, kupujący zgadza się na natychmiastowe udostępnienie treści, rezygnuje z 14-dniowego prawa odstąpienia od umowy i akceptuje regulamin, politykę prywatności oraz zasady zwrotów. Treść zgody napisał Antonio. Bez zaznaczenia pola kursu kupić się nie da. Konta przed zapłatą zakładać nie trzeba, płatność kartą idzie przez Stripe.

Panel zakupu na działającej stronie kursu: status, cena kursu, pole zgody i przycisk BUY NOW.

Lekcje widzi tylko ktoś, kto jest zapisany na kurs. Pliki PDF i filmy wgrane na serwer przechodzą przez to samo sprawdzenie zapisu, więc link do pliku podesłany znajomemu nic mu nie da. Wyjątkiem są obrazki wstawione w lekcje. Te zostały publiczne i to luka uzgodniona z Antoniem, a nie przeoczenie.

Pod spodem

Większość funkcji w jednej własnej wtyczce

Strona główna stoi na darmowym Elementorze, ale nikt nie składał jej ręcznie z klocków. Generuje ją skrypt z pliku JSON, więc w każdej chwili da się ją odtworzyć z kodu. Wszystko inne, od wyglądu kursu i panelu zakupu po newsletter i baner cookies, mieści się w jednej wtyczce, którą napisałem dla tej strony.

21 września pełna lista wtyczek na nowej stronie miała osiem pozycji, a dwóch z nich już nie ma. Antonio płacił za Elementora Pro, ale nowa strona ani razu go nie potrzebowała, więc 2 października go usunąłem. Dzień wcześniej zniknął dodatek łączący LearnDasha z Elementorem. Usunąłem go po teście na kopii roboczej: bez niego strona kursu i lekcja wyglądały identycznie, z tą samą liczbą elementów i tymi samymi plikami CSS i JS.

Zanim ustaliliśmy z Antoniem, co ma robić przycisk Reject w banerze cookies, sprawdziłem osiem podstron. Na żadnej nie było analityki ani skryptów reklamowych. Zostaje Stripe przy płatności i Vimeo w lekcjach, a bez nich strona nie działa. Antonio zdecydował, że baner zapisuje wybór odwiedzającego i niczego nie blokuje.

Bez SSH

Każda zmiana wgrywana przez terminal w panelu hostingu

Hosting nie daje dostępu przez SSH, co jego support potwierdził na piśmie. Zostaje terminal w cPanelu z WP-CLI. Każda zmiana szła więc tą samą drogą: plik trafia do tymczasowego projektu na Cloudflare Pages, serwer Antonia pobiera go stamtąd, porównuje sumę MD5 z tą, którą policzyłem u siebie, i dopiero wtedy go instaluje. Polecenia do terminala przygotowywałem jako gotowe bloki, a po każdym sprawdzałem działającą stronę.

Porównywanie sum nie jest tu nadgorliwością. Zaraz po wdrożeniu Cloudflare Pages potrafi przez chwilę podawać na zmianę starą i nową wersję tego samego pliku. Bez porównania na jego serwer trafiłaby ta, która akurat przyszła pierwsza.

Przełączenie

1 października: nowa strona na miejscu starej, stara nietknięta obok

Przez całe zlecenie nowa strona stała pod adresem roboczym. W dniu przełączenia niczego nie kopiowałem, tylko zamieniłem katalogi miejscami: instalacja robocza weszła do głównego katalogu, a stara strona trafiła obok, z plikami i bazą nietkniętymi. Do starej bazy nic nie zapisywałem, dlatego powrót oznaczałby tylko przeniesienie plików z powrotem i miał zająć najwyżej pięć minut. Najpierw kopie obu baz, a na czas zamiany stara strona w trybie konserwacji. Wszystko zmieściło się w przedziale godzin, który Antonio sam wybrał. Dokładnej długości przerwy nie zmierzyłem, więc nie podaję tu liczby.

Strona główna pod www.nudda.com po przełączeniu. Teksty na niej pochodzą od Antonia.

Zaraz po zamianie skrypt sprawdza z zewnątrz 14 rzeczy, między innymi to, czy odpowiada sześć najważniejszych podstron, czy zniknęła blokada dla wyszukiwarek, czy adres bez www przekierowuje na www, czy panel zakupu i pole zgody są na miejscu i czy w kodzie nie został żaden adres roboczy. Wyszło 14 z 14, a ten sam skrypt puszczałem po każdym kolejnym wdrożeniu. Wcześniej, na próbnym przełączeniu, celowo psułem stronę, żeby zobaczyć, że kontrole naprawdę zgłaszają błąd.

Antonio wskazał sześć kont osób, które kupiły kurs na starej stronie. Przeniosłem je z hasłami, które już miały, więc nikt nie dostał linku do resetu ani nowego hasła mailem, i każdego zapisałem na nowy kurs. Odczyt z bazy po imporcie dał sześć z sześciu kont, sześć z sześciu haseł i sześć z sześciu zapisów, bez żadnej wysłanej wiadomości. Na konto żadnego prawdziwego kupującego się nie logowałem. To, że stare hasło działa na nowej stronie, sprawdziłem wcześniej na kontach testowych: poprawnym hasłem, a dla kontroli także błędnym.

Prawdziwe pieniądze

Test płatności prawdziwą kartą za 1 EUR

Ustaliliśmy z Antoniem, że zamiast testowego trybu płatności będzie test na prawdziwych pieniądzach. Po przełączeniu kupiłem kurs własną kartą za 1 EUR przez Stripe i przeszedłem cały zakup, a Antonio zwrócił mi pieniądze ze swojego panelu Stripe. Potem przywróciłem kursowi normalną cenę. PayPala też zbudowałem i sprawdziłem w ten sam sposób, ale następnego dnia Antonio zdecydował, że na razie zostaje sama karta, więc PayPal jest wyłączony.

Czego to studium nie twierdzi

Wynik PageSpeed 97 i 98 dotyczy strony głównej na telefonie. Strona kursu miała tego dnia na telefonie 89 w obu pomiarach, a na komputerze strona kursu 98, główna 87. Dostępność, dobre praktyki i SEO miały 100 na obu stronach za każdym razem. Certyfikaty ukończenia kursu wystawia Antonio ręcznie, nie strona. A liczby mają daty celowo, bo strona jest teraz jego i on ją rozbudowuje.

Klient

Co Antonio napisał na koniec

Jego publiczna opinia na Upworku, 5,0 na 5:

„Adam rebuilt the NUDDA site from scratch and took it live cleanly. The course pages, checkout, and student area all work, and he kept the build lean instead of loading it with plugins we did not need. He was patient through a long list of details — logins, certificates, payments, the staging-to-live switch — and he explained each step in plain terms when I asked. The launch was organised, with a fall-back in place, and the site came up as planned. Clear, careful, and easy to work with. I would hire him again.”

Publikuję za jego zgodą z 2 października 2026.

Sprzedajesz kurs albo masz LearnDasha, którego nikt nie chce ruszać?

Napisz, co dziś sprzedajesz i na jakiej platformie. Zanim dojdziemy do ceny, dowiesz się, co da się przenieść bez strat i co stanie się z kontami osób, które już zapłaciły.

Zapytaj o stronę kursu