Strony firmowe, landing page i serwisy w WordPress oraz Next.js — projektowane pod konwersję i widoczność w Google.
Tworzenie stron WWWProjektowanie UX/UIStrony dla firmLanding pageRedesign strony
Komunikat „W witrynie wystąpił błąd krytyczny” opisuje skutek, nie przyczynę. Przejdź przez bezpieczne pozyskanie logu, odtworzenie usterki, izolację komponentu oraz kontrolę naprawy bez ujawniania błędów odwiedzającym.
Debugowanie WordPress polega na powiązaniu objawu z konkretnym zdarzeniem i sprawdzeniu przyczyny. Samo włączenie WP_DEBUG nie naprawia strony. Poniżej przechodzimy od statusu HTTP przez prywatny log PHP do odizolowania wadliwego kodu, sprawdzenia poprawki i wyłączenia diagnostyki. Wykonujemy jedną kontrolowaną procedurę w lokalnym laboratorium; nie wyłączamy wszystkich wtyczek na działającej stronie klienta.
| Składnik | Wersja lub zakres |
|---|---|
| WordPress / PHP / WP-CLI | 7.1 / 8.3.33 / 2.12.0 |
| Baza i klient SQL | MySQL 8.4.10 / MariaDB client 11.8.6 |
| Motyw | Twenty Twenty-Five 1.5 |
| Własne elementy testowe | WA Lab Fault, formularz lokalny i przechwycenie wp_mail; bez funkcji płatniczych |
| Cel diagnostyki | Odseparowany restore w Dockerze, dostęp tylko na 127.0.0.1:18882 |
| Dostęp, który masz | Pierwsza bezpieczna czynność | Dalsza ścieżka |
|---|---|---|
| Tylko panel hostingu lub WordPressa | Zapisz URL, godzinę i ostatnią zmianę. Odczytaj pasujący log PHP w hostingu oraz dostępność ostatniej kopii. Nie aktualizuj wszystkich dodatków naraz. | Poproś o prywatną kopię i odtworzenie konkretnego błędu. Wzór zgłoszenia na końcu pozwala przekazać potrzebne dane bez haseł. |
| Panel WP nie działa, ale dostałeś Recovery Mode | Otwórz link wyłącznie samodzielnie; ustal wskazany komponent i wersję. Nie publikuj linku odzyskiwania. | Działający panel w tej sesji nie oznacza naprawy dla odwiedzających. Sprawdź zwykłe żądanie bez tej sesji i zaplanuj test na kopii. |
| Mam SFTP, ale nie mam SSH | Zabezpiecz konfigurację poza WWW i znajdź log hostingu. Na kopii można odizolować wskazaną zwykłą wtyczkę zmianą nazwy jej katalogu. | Nie zmieniaj całego wp-content. Dla MU pluginu, motywu lub niedziałającego PHP potrzebna jest inna diagnoza; nie traktuj zmiany nazwy jako naprawy funkcji. |
| Mam terminal i chcę przejść proces technicznie | Wybierz laboratorium WP z etapów 1–7 albo dodatkowy przykład funkcjonalny PHP w etapie 8. | Wymagaj wyniku tej samej czynności przed/po, a nie tylko zniknięcia HTTP 500. |
Przy awarii produkcji nie musisz najpierw budować naszego Dockera: zacznij od dowodu z własnego żądania i hostingu. Laboratorium służy nauczeniu i sprawdzeniu procedury bez danych klientów. Ścieżek konkretnego panelu hostingu nie testowaliśmy. Jeżeli błąd zatrzymuje zamówienia lub formularze, priorytetem jest ustalenie bezpiecznego sposobu przywrócenia funkcji i granicy nowych danych, nie eksperyment na działającym serwisie.
41 kontroli, rzeczywiste wersje, dwa błędy oraz wynik końcowej weryfikacji. Wyłącznie dane syntetyczne.
Zanotuj dokładny URL, godzinę i strefę czasową, status HTTP, rodzaj żądania oraz ostatnią zmianę: aktualizację wtyczki, motywu, PHP, wdrożenie kodu lub konfiguracji. Odróżnij awarię całej strony od jednego formularza czy zadania w tle. Sprawdź, czy problem występuje również bez zalogowania i czy odpowiedź pochodzi z cache. Nie publikuj adresu z tokenem resetowania hasła ani danych POST.
| Objaw | Pierwszy dowód | Gdzie szukać dalej |
|---|---|---|
| Komunikat o błędzie krytycznym | Odpowiadający czasem wpis PHP Fatal/Parse error | Wtyczka, motyw lub kod wskazany w logu; cały kontekst wywołania. |
| HTTP 500 bez logu WordPress | Log serwera WWW i PHP-FPM/Apache | Błąd przed uruchomieniem WP, konfiguracja lub uprawnienia; nie każda awaria zapisze debug.log. |
| HTTP 502/504 | Log proxy oraz backendu | Niedostępny lub przeciążony proces, timeout; sam WP_DEBUG może nie dać odpowiedzi. |
| Błąd połączenia z bazą | Stan bazy i właściwa konfiguracja połączenia | Dostępność serwera, limity, poświadczenia, uprawnienia; nie wklejaj hasła do narzędzi diagnostycznych. |
| Biała strona z HTTP 200 | Treść odpowiedzi oraz log tego żądania | Cache, wyjście PHP, szablon lub JavaScript; sam status 200 nie potwierdza sprawności. |
Jeśli działa Recovery Mode WordPress, może umożliwić dostęp do panelu po części błędów krytycznych. Wstrzymanie komponentu dla sesji administratora nie naprawia automatycznie publicznej witryny. Wiadomość odzyskiwania może nie dotrzeć; zadania CRON i niektóre awarie wymagają innej drogi. Linku odzyskiwania nie przekazuj publicznie.
Przed zmianą zrób kopię plików i bazy oraz ustal sposób powrotu. Pełną procedurę z odseparowanym celem opisuje backup WordPress i test przywracania. Sama kopia pliku wp-config.php zabezpiecza tylko ten plik, a nie całą stronę. Jeżeli nie potrafisz odizolować danych i wysyłek, zatrzymaj się przed uruchomieniem sklonowanej aplikacji.
Lokalna instalacja, syntetyczne dane, kontrolowana wtyczka i protokół wykonania bloków w evidence/results-manual.json. Nie instaluj wtyczki wywołującej błąd na produkcji.
Jeżeli wykonałeś ręczną ścieżkę poprzedniego poradnika, masz już działający cel restore i możesz przejść do kontroli bazowej poniżej. Jeżeli zaczynasz od zera, rozpakuj paczkę do nowego katalogu i w katalogu z compose.yaml uruchom polecenia przygotowania. Skrypt wymaga Node.js 20 lub nowszego, sam tworzy dane, kopię i cel, a także wykonuje automatyczny test diagnozy. Po jego zakończeniu możesz powtórzyć ręcznie wybrany scenariusz z tego artykułu. Skrypt odmawia nadpisania zainstalowanego źródła — nie uruchamiaj go ponownie po ścieżce ręcznej.
docker compose up -d --build
docker compose ps
docker compose exec -T --user www-data source test -f /var/www/html/wp-config.php
docker compose exec -T --user www-data restore test -f /var/www/html/wp-config.php
docker compose exec -T --user www-data source wp db query 'SELECT DATABASE(), @@hostname, @@server_uuid, VERSION();'
docker compose exec -T --user www-data restore wp db query 'SELECT DATABASE(), @@hostname, @@server_uuid, VERSION();'
docker compose exec -T --user www-data source wp db query 'SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE();' --skip-column-names
docker compose exec -T --user www-data restore wp db query 'SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE();' --skip-column-names
node run.mjsPrzed uruchomieniem node run.mjs bazy muszą być healthy, a kontrola konfiguracji i wszystkie zapytania SQL kończyć się powodzeniem. Mają wskazywać dwa różne serwery i UUID, bazę wordpress_lab, a COUNT tabel ma wynosić 0 dla obu. Brak połączenia nie jest dowodem pustej bazy. Jeśli inicjalizacja jeszcze trwa, sprawdź docker compose logs i ponów kontrolę, nie następny krok. Po skrypcie wymagamy success=true w results.json. Przy błędzie nie resetuj hurtowo wolumenów. Ręczne polecenia diagnostyczne wykonujemy tylko na restore pod http://127.0.0.1:18882. Katalog WWW to /var/www/html, prywatny to /var/www/private; port jest dostępny wyłącznie na loopback.
docker compose exec -T --user www-data restore wp core version
docker compose exec -T restore php --version
docker compose exec -T --user www-data restore wp cli version
docker compose exec -T --user www-data restore wp plugin list --fields=name,status,version
curl --silent --show-error --output /dev/null --write-out '%{http_code}\n' http://127.0.0.1:18882/Lokalny obraz laboratorium używa połączenia z bazą bez TLS tylko wewnątrz niepublikowanej sieci jednej maszyny i wyłącznie dla syntetycznych danych. Nie jest to porada wyłączania weryfikacji certyfikatów w produkcji. Zewnętrzne połączenie hostingu wymaga prawidłowej konfiguracji TLS, CA i nazwy hosta; nie jest objęte tym ćwiczeniem.
Ustal, który wp-config.php jest faktycznie ładowany. W laboratorium jest w /var/www/html; na hostingu może znajdować się wyżej lub pobierać konfigurację z innych plików. Zachowaj oryginał w prywatnym katalogu. Jeśli wp-config.before-debug.php już istnieje, nie nadpisuj wcześniejszej kopii — sprawdź stan poprzedniej sesji. Sprawdź definicje WP_DEBUG, WP_DEBUG_LOG i WP_DEBUG_DISPLAY. Nie dopisuj drugiego zestawu na końcu pliku i nie kopiuj całej konfiguracji do zgłoszenia.
docker compose exec -T --user www-data restore sh -eu -c 'test ! -e /var/www/private/wp-config.before-debug.php; umask 077; cp /var/www/html/wp-config.php /var/www/private/wp-config.before-debug.php'
docker compose exec -T --user www-data restore wp config set WP_DEBUG true --raw
docker compose exec -T --user www-data restore wp config set WP_DEBUG_LOG /var/www/private/debug.log
docker compose exec -T --user www-data restore wp config set WP_DEBUG_DISPLAY false --raw
docker compose exec -T restore php -l /var/www/html/wp-config.phpParametr --raw jest istotny: false ma być wartością logiczną, nie napisem 'false', który PHP traktuje jako prawdziwy. Obejrzyj wynik zmian w konfiguracji; poniższe definicje mają znajdować się przed załadowaniem wp-settings.php. W przypadku warunkowej konfiguracji lub zmiennych środowiskowych sprawdź efektywną wartość, nie tylko tekst pojedynczej linii.
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', '/var/www/private/debug.log' );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );Według dokumentacji debugowania WordPress WP_DEBUG_LOG działa przy aktywnym WP_DEBUG i może wskazywać własny plik. WP_DEBUG_DISPLAY niezależnie ogranicza wyświetlanie błędów. Dokumentacja wp config set opisuje aktualizację stałych bez ładowania całego WordPressa. Te narzędzia przeznaczone są do diagnostyki na local/staging, nie stałego działania w produkcji.
Najpierw wgraj i aktywuj poprawną wersję lokalnego fixture wa-lab-fault, a dopiero potem zastąp ją wariantem wywołującym nieistniejącą funkcję. Wtyczka jest dołączona do paczki jako jawny plik tekstowy. Nie ma zadania biznesowego — celowo odtwarza określoną awarię PHP. Kod błędu funkcji działa tylko w środowisku local i pomija CLI. Nawet z tym ograniczeniem nie kopiuj go na produkcję.
docker compose exec -T --user www-data restore mkdir -p wp-content/plugins/wa-lab-fault
docker compose cp fixtures/fault-fixed.php.txt restore:/var/www/html/wp-content/plugins/wa-lab-fault/wa-lab-fault.php
docker compose exec -T --user www-data restore wp plugin activate wa-lab-fault
docker compose cp fixtures/fault-function.php.txt restore:/var/www/html/wp-content/plugins/wa-lab-fault/wa-lab-fault.php
docker compose restart restoreRestart dotyczy tylko lokalnego kontenera restore i czyści stan OPcache, aby kolejny test uruchamiał właśnie wgrany plik. Nie jest poleceniem restartu hostingu WebAlpha ani zaleceniem restartowania dowolnej produkcji. Poczekaj, aż serwer w kontenerze ponownie zacznie odpowiadać. Zanotuj czas UTC i wywołaj jedno żądanie testowe; na prawdziwej kopii zamiast fixture odtwórz rzeczywistą czynność wywołującą awarię.
date -u '+%Y-%m-%dT%H:%M:%SZ'
curl --silent --show-error --output /dev/null --write-out '%{http_code}\n' 'http://127.0.0.1:18882/?wa_fault=function'
docker compose exec -T --user www-data restore tail -n 40 /var/www/private/debug.logDla tego scenariusza oczekujemy HTTP 500 oraz zdarzenia Call to undefined function wa_lab_missing_function() wskazującego plik wp-content/plugins/wa-lab-fault/wa-lab-fault.php. To oczekiwanie wynikające z celowo wadliwego kodu, nie diagnoza każdej realnej strony. W treści odpowiedzi nie powinny pojawić się stos wywołań, nazwa funkcji ani prywatna ścieżka logu. Log odczytuj w terminalu i anonimizuj przed przekazaniem komukolwiek.
Czytaj typ błędu, komunikat, plik, linię oraz stos wywołań jako całość. Linia z wp-includes nie zawsze oznacza błąd samego WordPressa: mogła zostać wywołana przez dodatek z nieprawidłowymi danymi. Ostrzeżenie Deprecated sprzed tygodnia nie jest automatycznie przyczyną dzisiejszego HTTP 500. Priorytetem jest zdarzenie zgodne czasem i czynnością, którą odtworzyłeś.
| Wpis | Hipoteza do sprawdzenia | Test rozróżniający |
|---|---|---|
| Parse error / syntax error | Nieprawidłowa składnia lub składnia niewspierana przez używane PHP | php -l wskazanego pliku w tej samej wersji PHP; porównanie z poprawną paczką kodu. |
| Call to undefined function / Class not found | Brak zależności, niepełne wdrożenie albo zła kolejność ładowania | Sprawdzenie definicji, wersji i paczki komponentu; kontrolowane uruchomienie bez wskazanej wtyczki. |
| Allowed memory size exhausted | Za duży przebieg, pętla, wadliwe dane lub zbyt niski limit | Powtarzalna czynność i zużycie pamięci; nie podnoś limitu bez ustalenia źródła obciążenia. |
| Permission denied / failed to open stream | Brak pliku lub nieprawidłowy właściciel albo prawa | Kontrola istniejącej ścieżki i użytkownika procesu; bez nadawania globalnego zapisu. |
| Brak pasującego zdarzenia | Żądanie nie dociera do PHP albo log wskazuje inną lokalizację | Status i log proxy/serwera, konfiguracja PHP, prywatny katalog, czas i cache. |
[07-Sep-2026 12:45:53 UTC] PHP Fatal error: Uncaught Error: Call to undefined function wa_lab_missing_function() in /var/www/html/wp-content/plugins/wa-lab-fault/wa-lab-fault.php:7docker compose exec -T --user www-data restore wp --skip-plugins=wa-lab-fault plugin deactivate wa-lab-fault
curl --silent --show-error --output /dev/null --write-out '%{http_code}\n' http://127.0.0.1:18882/Jeżeli log wskazuje zwykłą wtyczkę, na kopii pomiń jej ładowanie w WP-CLI i wyłącz tylko ją. W poleceniu użyj rzeczywistego slugu katalogu z wp-content/plugins; nazwa marketingowa z panelu nie musi być slugiem. Nie używaj --uninstall: diagnoza nie wymaga usuwania konfiguracji i danych dodatku. Zachowaj kopię wadliwej wersji do porównania.
wp --path=/rzeczywisty/katalog/wordpress --skip-plugins --skip-themes plugin deactivate SLUG_Z_LOGU
wp --path=/rzeczywisty/katalog/wordpress --skip-plugins --skip-themes plugin status SLUG_Z_LOGUDokumentacja wp plugin deactivate opisuje wyłączenie wskazanego komponentu. --skip-plugins pomija zwykłe wtyczki podczas uruchamiania CLI, ale nadal ładuje mu-plugins. Nie rozwiąże więc każdej awarii wp-config.php, must-use pluginu, drop-inu cache lub motywu. Jeśli CLI nadal się zatrzymuje, sprawdź jego błąd i log serwera; nie poszerzaj zakresu wyłączeń bez dowodu.
Brak SSH nie zawsze blokuje diagnozę: na kopii można przez SFTP zmienić nazwę katalogu wskazanej zwykłej wtyczki, zachowując oryginalny kod. Zanotuj zmianę i później uporządkuj status w panelu. Nie zmieniaj hurtowo nazwy całego wp-content. Przy awarii motywu potrzebny jest zainstalowany zgodny motyw zastępczy i osobny test wyglądu oraz funkcji; to nie jest neutralna zmiana produkcyjna.
Przy błędzie składni porównaj plik z właściwym wydaniem i sprawdź php -l w wersji PHP używanej przez serwis. Przy brakującej funkcji ustal, czy brakuje zależności, czy aktualizacja była niepełna, czy własny kod wywołuje niewłaściwe API. Nie dopisuj pustej funkcji ani warunku function_exists tylko po to, żeby ukryć fatal error — możesz w ten sposób pominąć potrzebne działanie. Poprawka ma przywrócić konkretną funkcję, a nie jedynie wygasić komunikat.
W laboratorium ścieżka naprawy polega na zastąpieniu celowo wadliwej wersji fixture wersją poprawną i wykonaniu tego samego żądania. Na prawdziwej stronie wybierz ustaloną zgodną paczkę autora albo poprawkę własnego kodu, przetestowaną na kopii. Jeżeli zmiana wymaga cofnięcia migracji bazy, potrzebujesz zgodnego zestawu kod+baza i rozliczenia danych zapisanych od czasu kopii; sama podmiana katalogu wtyczki może nie wystarczyć.
docker compose cp fixtures/fault-fixed.php.txt restore:/var/www/html/wp-content/plugins/wa-lab-fault/wa-lab-fault.php
docker compose exec -T --user www-data restore php -l wp-content/plugins/wa-lab-fault/wa-lab-fault.php
docker compose restart restore
docker compose exec -T --user www-data restore wp plugin activate wa-lab-fault
curl --silent --show-error --output /dev/null --write-out '%{http_code}\n' 'http://127.0.0.1:18882/?wa_fault=function'Po ponownym uruchomieniu kontenera wymagamy HTTP 200, poprawnej treści i braku nowego odpowiadającego błędu w logu. Fixture po prostu nie wywołuje już celowo nieistniejącej funkcji; nie udajemy, że ten test przywrócił funkcję rzeczywistego modułu sprzedażowego. Dla produkcyjnej wtyczki potrzebny jest osobny test jej wymaganego zachowania.
Wariant syntax to osobny test. Plik zawiera celowo nieprawidłowe przypisanie; PHP nie może go sparsować, więc żaden warunek ochronny wewnątrz tego pliku nie zdąży zadziałać. Wykonuj go wyłącznie w tym samym izolowanym restore, po zakończeniu pierwszego scenariusza. Tu php -l powinno zakończyć się błędem — jest to oczekiwany wynik próby negatywnej, nie powód do pominięcia kontroli.
docker compose cp fixtures/fault-syntax.php.txt restore:/var/www/html/wp-content/plugins/wa-lab-fault/wa-lab-fault.php
docker compose restart restore
curl --silent --show-error --output /dev/null --write-out '%{http_code}\n' 'http://127.0.0.1:18882/?wa_fault=syntax'
docker compose exec -T --user www-data restore tail -n 40 /var/www/private/debug.log
docker compose exec -T --user www-data restore php -l wp-content/plugins/wa-lab-fault/wa-lab-fault.php
docker compose exec -T --user www-data restore wp --skip-plugins=wa-lab-fault plugin deactivate wa-lab-faultW logu szukaj Parse error lub syntax error z tego żądania. Po izolacji powtórz blok przywrócenia poprawnego fixture z poprzedniej sekcji, zmieniając kontrolny URL na /?wa_fault=syntax. Dopiero powrót prawidłowej odpowiedzi po aktywacji poprawionej wtyczki zamyka ten scenariusz. Nie zostawiaj wadliwego pliku na koniec ćwiczenia.
[07-Sep-2026 12:45:58 UTC] PHP Parse error: syntax error, unexpected token ";" in /var/www/html/wp-content/plugins/wa-lab-fault/wa-lab-fault.php on line 5W wykonanym teście oba błędy dały HTTP 500 i prywatny wpis logu, ale szczegóły błędu nie trafiły do treści odpowiedzi. Po izolacji uzyskaliśmy HTTP 200; po wgraniu poprawnego fixture i ponownej aktywacji również HTTP 200. Kontrola php -l dla uszkodzonej składni zakończyła się kodem 255 i wskazała błąd. To obserwacje dla powyższych plików, nie uniwersalne rozpoznanie wszystkich błędów krytycznych.
Dodatkowo można sprawdzić integralność core przez wp core verify-checksums, podając właściwe --version i --locale. Wynik dotyczy plików rdzenia, nie bezpieczeństwa całej witryny ani poprawności wtyczek. Nie wyłączaj walidacji TLS, gdy narzędzie nie może pobrać sum; najpierw diagnozuj połączenie. W odseparowanym laboratorium takie pobieranie może być świadomie zablokowane.
Po testach porównaj konfigurację ze stanem sprzed diagnozy. Jeżeli nie zmieniałeś innych ustawień, można odtworzyć zachowaną kopię wp-config.php. Jeżeli w międzyczasie zmieniły się poświadczenia lub inne ustawienia, nie nadpisuj ich starym plikiem — przywróć tylko odpowiednie stałe. W naszym lokalnym scenariuszu stan końcowy ma wyłączone debugowanie i wyświetlanie błędów.
docker compose exec -T --user www-data restore wp config set WP_DEBUG false --raw
docker compose exec -T --user www-data restore wp config set WP_DEBUG_LOG false --raw
docker compose exec -T --user www-data restore wp config set WP_DEBUG_DISPLAY false --raw
docker compose exec -T restore php -l /var/www/html/wp-config.php
docker compose exec -T --user www-data restore wp eval 'echo wp_json_encode(array("WP_DEBUG" => WP_DEBUG, "WP_DEBUG_LOG" => WP_DEBUG_LOG, "WP_DEBUG_DISPLAY" => WP_DEBUG_DISPLAY));'
curl --silent --show-error --output /dev/null --write-out '%{http_code}\n' http://127.0.0.1:18882/
curl --silent --show-error --output /dev/null --write-out '%{http_code}\n' http://127.0.0.1:18882/wp-content/debug.log
curl --silent --show-error --output /dev/null --write-out '%{http_code}\n' http://127.0.0.1:18882/private/debug.logDla obu prób pliku logu oczekujemy braku publicznej treści; prawidłowym wynikiem w naszym układzie jest 404. Na innym serwerze może to być np. 403, ale trzeba sprawdzić również treść odpowiedzi i konfigurację aliasów — jedna próba URL nie dowodzi prywatności wszystkich ścieżek. Wyłączenie WP_DEBUG_LOG nie usuwa starego logu. Zachowaj potrzebny, zanonimizowany dowód w prywatnym miejscu, a pozostałe dane usuń zgodnie z ustaloną retencją. Nie kasuj logów incydentu bezpieczeństwa bez zabezpieczenia dowodów.
{"WP_DEBUG":false,"WP_DEBUG_LOG":false,"WP_DEBUG_DISPLAY":false}Końcowy test potwierdził powyższe booleany, HTTP 404 dla /wp-content/debug.log i /private/debug.log oraz działające logowanie i lokalny formularz. Odczytujemy efektywne stałe w PHP, a nie interpretujemy pustego wyniku wp config get jako błąd: dla wartości false ten interfejs CLI może zwrócić pusty tekst.
Na produkcji ustawienie display_errors należy sprawdzić także w konfiguracji PHP serwera. Błąd składni samego wp-config.php może wystąpić zanim WordPress zastosuje swoje stałe. Log PHP hostingu może i powinien działać niezależnie od wyłączonego WP_DEBUG; zakończenie tymczasowej diagnostyki nie oznacza wyłączenia całego monitoringu błędów.
Powyższa wtyczka wa-lab-fault uczy izolacji deterministycznych błędów. Drugi, odrębny przykład ma konkretną funkcję: shortcode wa_reading_time wyświetla oszacowanie czasu czytania na podstawie liczby słów i przyjętej przez redaktora prędkości. Dla 901 słów oraz 200 słów/min wynik ma wynosić 5 min. Nie jest to automatyczny pomiar zachowania czytelników ani wyliczanie słów dowolnego języka z HTML.
Dwa pliki wtyczki, testy PHP i scenariusz HTTP. Osobne dowody: 37 kontroli natywnych oraz 23 kontrole rzeczywistego WP i 4 kontrole przywrócenia stanu, obejmujące też kopię szyfrowaną. Bez danych klienta.
[wa_reading_time words="901" wpm="200" label="Czas czytania"]Dodatek zawiera reading-time.php z czystą funkcją oraz wa-reading-time.php z rejestracją shortcode i bezpiecznym wynikiem HTML. Nie kopiuj do WordPressa pliku reading-time.test.php ani adaptera HTTP; są tylko narzędziami testowymi. Najpierw w katalogu rozpakowanego dodatku uruchom test PHP. Wymaga PHP 8 lub nowszego; nasz rzeczywisty wynik dotyczy 8.5.5.
php -l reading-time.php
php -l wa-reading-time.php
php reading-time.test.php| Dane wejściowe | Wymagany wynik | Dlaczego ten test ma znaczenie |
|---|---|---|
| words=901, wpm=200 | 5 min | Zaokrąglenie w górę — samo HTTP 200 mogłoby ukrywać błędne 4 min. |
| words=200 oraz words=201, wpm=200 | Odpowiednio 1 i 2 min | Granica pełnej minuty. |
| words=0 | 0 min | Jawny przypadek pustej treści. |
| wpm=0, ujemne lub ułamkowe words | Komunikat błędnych parametrów, bez dzielenia przez zero | Walidacja przed obliczeniem, bez losowego podnoszenia limitów. |
| Etykieta zawierająca <script> | Tekst escapowany, nie aktywny znacznik | Odbiór obejmuje wyjście, a nie wyłącznie wynik liczbowy; w natywnym teście jest to kontrola adaptera. |
W kontrolowanej próbie wersja wadliwa wywoływała minutes_legacy(), chociaż plik reading-time.php definiował minutes(). To nie brak losowej wtyczki ani zbyt niski limit pamięci: nazwa wywołania nie odpowiadała dostępnej funkcji we wspólnej przestrzeni nazw. Log wskazał dokładnie ten błąd. Naprawa zmienia jedno wywołanie, zachowuje walidację parametrów i naprawdę przywraca wyliczenie.
- $minutes = minutes_legacy($attributes['words'], $attributes['wpm']);
+ $minutes = minutes($attributes['words'], $attributes['wpm']);[07-Sep-2026 13:35:22 UTC] PHP Fatal error: Uncaught Error: Call to undefined function WebAlpha\ReadingTime\minutes_legacy() in /var/www/html/wp-content/plugins/wa-reading-time/wa-reading-time.php:23Możesz odtworzyć cały test poleceniem niżej. Runner uruchomi tylko własny serwer PHP na losowym porcie 127.0.0.1, zachowa prywatny log poza jego webroot i po próbie zatrzyma własny proces. Najpierw wymaga 200 i „5 min”, potem odtwarza błędne wywołanie i 500, podmienia je na poprawne i ponawia ten sam URL. Test kończy się dopiero przy identycznym wyniku funkcji i zaliczonej regresji, a nie po samej dezaktywacji kodu. Wykonuje też opisane w poradniku backupu testy GnuPG; wymaga Node.js 20+, GnuPG, PHP i tar.
node test-native.mjs ./native-results-new.jsonOsobny pełny test WP z dodatku wymaga wcześniej ukończonego syntetycznego laboratorium z poradnika backupu. Nie uruchamiaj ponownie seedowania na zachowanych danych. Wskaż katalog bazowej paczki z compose.yaml, a polecenie niżej wykonaj z katalogu dodatku. Runner sprawdza izolację, eksportuje zestaw do nowej bazy/prywatnego katalogu, a funkcję wtyczki testuje na istniejącym restore:18882. Potrzebuje kilkuset MB na nową próbę. Chwilowo restartuje wyłącznie restore i po teście przywraca konfigurację oraz poprzednie dane; nie uruchamiaj w tym czasie innych zmian. JSON musi zawierać success:true, 23 zaliczone kontrole i 4 zaliczone kontrole cleanup.
WA_WORDPRESS_LAB='/pelna/sciezka/wordpress-lab-2026-09-07' \
node test-wordpress.mjs ./wordpress-results-new.jsonParametry shortcode, wartości domyślne i zabezpieczanie wyniku opisuje oficjalna dokumentacja Shortcodes with Parameters. Nasz przykład ilustruje tę metodę, a nie zastępuje testu zgodności z dodatkami Twojej witryny.
Czas i strefa: YYYY-MM-DD HH:MM:SS UTC
Objaw i status HTTP:
Ścieżka URL bez tokenów i danych osobowych:
Ostatnia zmiana i jej wersja:
WordPress / PHP / motyw / wskazana wtyczka:
Dokładna czynność odtwarzająca problem:
Zanonimizowany fragment logu z tego żądania:
Co sprawdzono na kopii i z jakim wynikiem:
Stan kopii zapasowej i sposób przywracania:
Czy błąd blokuje formularze, płatności lub administrację:Nie przesyłaj całego wp-config.php, cookies, linku Recovery Mode ani pełnego dumpa przez zwykły formularz. W usłudze naprawy WordPress zakres i sposób bezpiecznego udostępnienia danych ustalamy przed pracą. Po usunięciu przyczyny warto objąć stronę opieką techniczną z testami i monitoringiem, żeby kolejna aktualizacja miała właściciela, dowód odbioru i plan powrotu.
Opisz moment awarii, ostatnią zmianę, wersje i wykonane próby. Ustalimy zakres diagnozy oraz sposób bezpiecznego przekazania logów. Nie dołączaj haseł, tokenów, cookies ani danych klientów do zgłoszenia.
Zobacz zakres naprawy WordPressStrony firmowe, landing page i serwisy w WordPress oraz Next.js — projektowane pod konwersję i widoczność w Google.
Tworzenie stron WWWProjektowanie UX/UIStrony dla firmLanding pageRedesign strony
Sklepy na PrestaShop i WooCommerce — wdrożenia, migracje i dedykowane moduły pisane przez zespół senior developerów.
Tworzenie sklepówNowy sklep PrestaShopMigracja na PrestaShopModuły PrestaShopIntegracja z hurtowniami
Pozycjonowanie, SEO techniczne i optymalizacja konwersji — widoczność, kliknięcia i zarejestrowane konwersje porównywane z baseline'em.
SEO dla firmLokalne SEOContent SEOAudyt SEOSEO techniczne
Utrzymanie, aktualizacje i stały rozwój — bierzemy odpowiedzialność za obszar techniczny również po starcie projektu.
Opieka nad stronąAktualizacje i serwerSupport w pakietach godzinRozwój stronyWdrożenia niestandardowe
Bezpłatna konsultacja
Opisz, czego potrzebujesz — zaproponujemy zakres, technologię i realny harmonogram. Bez zobowiązań.
Następny krok
Krótka rozmowa albo wiadomość — wrócimy z konkretną propozycją zakresu.
Formularz kontaktowyOpisz, czego potrzebujesz — strony, sklepu, integracji czy wsparcia technicznego. Odpowiemy z konkretnymi propozycjami i orientacyjną wyceną, zwykle w ciągu 24–48 godzin roboczych.
ul. Henryka Pachońskiego 7a
31-223 Kraków
Biuro czynne: pon.–pt., 9:00–17:00
Webalpha
NIP: 6562340974
REGON: 385895790