naprawa-stron.pl Online 24/7 Zgłoś awarię

Wystąpił błąd krytyczny WordPress – co zrobić krok po kroku

Autor: Grzegorz Wojterzak. Aktualizacja: 12 października 2026. Czas czytania: około 16 minut.

$ diagnoza błąd krytyczny WordPress
Typowe objawy
Komunikat „Na tej stronie wystąpił błąd krytyczny” zamiast strony lub panelu
Najczęstsza przyczyna
Wtyczka lub motyw po aktualizacji, zmiana wersji PHP, brak pamięci
Czas naprawy
Zwykle od kilkunastu minut do 2 godzin, jeśli przyczyna jest w logu
Czy zrobisz to sam?
Tak, jeśli masz dostęp do FTP lub menedżera plików hostingu i umiesz edytować plik tekstowy

Szybka odpowiedź

Komunikat „Na tej stronie wystąpił błąd krytyczny” oznacza, że kod PHP wtyczki, motywu lub samego WordPressa przerwał działanie z błędem typu fatal. Najpierw poszukaj maila od WordPressa z linkiem do trybu odzyskiwania i wyłącz w nim wskazaną wtyczkę. Bez maila włącz WP_DEBUG_LOG w wp-config.php, odczytaj z wp-content/debug.log ścieżkę do winnego pliku i wyłącz ten dodatek, zmieniając nazwę jego katalogu przez FTP. Twoje treści i zamówienia w bazie danych zwykle są nienaruszone.

Ten komunikat wygląda groźnie, bo zastępuje całą stronę jednym zdaniem. W praktyce to jeden z wdzięczniejszych błędów do naprawy. WordPress od wersji 5.2 przechwytuje błędy krytyczne PHP, zamiast pokazywać pustą stronę, i w wielu przypadkach sam podpowiada, który dodatek zawinił. Trzeba tylko wiedzieć, gdzie tej podpowiedzi szukać.

Poniżej opisuję kolejność, w której sprawdzam takie awarie. Zaczynam od najszybszych i najbezpieczniejszych kroków. Każdy kolejny daje więcej informacji, ale wymaga trochę więcej dostępu do serwera.

Co oznacza komunikat „wystąpił błąd krytyczny”

Błąd krytyczny (w PHP: Fatal error) to sytuacja, w której interpreter PHP nie może wykonać dalej kodu i przerywa generowanie strony. Typowe powody: wywołanie funkcji, która nie istnieje, wyczerpanie pamięci, błąd składni w pliku albo przekazanie danych złego typu do funkcji, która w nowszym PHP już tego nie toleruje.

Zanim WordPress zamknie połączenie, jego mechanizm obsługi błędów sprawdza, co się stało, wysyła przeglądarce kod HTTP 500 i wyświetla krótki komunikat. Treść tego komunikatu zależy od tego, gdzie jesteś i czy działa tryb odzyskiwania. To ważna wskazówka, dlatego warto przyjrzeć się, który wariant widzisz.

Trzy warianty komunikatu o błędzie krytycznym i co z nich wynika Makiety trzech okien przeglądarki. Pierwsze: sam komunikat o błędzie krytycznym z linkiem do poradnika WordPress, widoczny dla odwiedzających stronę. Drugie: komunikat z prośbą o sprawdzenie skrzynki administratora, widoczny w panelu i na stronie logowania, oznacza, że WordPress próbował wysłać mail. Trzecie: komunikat o trybie odzyskiwania, widoczny po wejściu z linku z maila. twojadomena.pl/sklep/ Na tej stronie wystąpił błąd krytyczny. link do poradnika WordPress brak innych informacji …/wp-admin/ Na tej stronie wystąpił błąd krytyczny. + prośba o sprawdzenie skrzynki e-mail administratora link do forum wsparcia …/wp-admin/plugins.php Błąd krytyczny, strona w trybie odzyskiwania. + sprawdź ekrany Wtyczki i Motywy widzi każdy gość panel i logowanie po kliknięciu linku z maila Co z tego wynika Sam komunikat nie mówi nic o przyczynie. Zaloguj się do panelu albo sprawdź log. WordPress próbował wysłać mail z linkiem. Szukaj go też w spamie. Mail przychodzi raz na dobę. Wadliwy dodatek jest wstrzymany tylko dla Ciebie. Dezaktywuj go, dopiero wtedy wraca strona.
Makiety pokazują sens komunikatów, a nie ich dokładne brzmienie, które zależy od wersji WordPressa i tłumaczenia.

Starsze instalacje (WordPress 5.2) pokazywały w tym miejscu zdanie o tym, że witryna ma problemy techniczne. Od wersji 5.3 komunikat mówi wprost o błędzie krytycznym. W wersjach od 5.3 do 5.6 link pod nim prowadził do poradnika o debugowaniu WordPressa, od wersji 5.7 prowadzi do strony z rozwiązywaniem typowych problemów. Jeśli widzisz wariant z linkiem do debugowania, strona działa na WordPressie sprzed kilku lat i aktualizacja będzie jednym z zadań po naprawie. Niezależnie od brzmienia mechanizm jest ten sam.

W aktualnym polskim WordPressie (sprawdzone na wersji 7.1) komunikat brzmi: „W witrynie wystąpił krytyczny błąd.”, a w panelu i na stronie logowania dochodzi zdanie o instrukcjach w skrzynce e-mail administratora.

Komunikat W witrynie wystąpił krytyczny błąd w polskim WordPressie 7.1
Zrzut ekranuKomunikat w polskim WordPressie 7.1 po wejściu do panelu, gdy błąd spowodowała wtyczka. Zrzut z testowej instalacji.
Twoje dane najpewniej są całe

Błąd krytyczny przerywa wyświetlanie strony, ale niczego nie kasuje. Wpisy, produkty, zamówienia i zdjęcia leżą w bazie danych i na dysku. Kiedy usuniesz przyczynę, strona wraca w takim stanie, w jakim była przed awarią.

Od czego zacząć: mapa diagnostyki

Na schemacie widać kolejność, w której przechodzę przez możliwe przyczyny. Najwięcej czasu oszczędza jedno pytanie: czy masz mail od WordPressa. Jeśli nie, wszystko opiera się na logu błędów, a log prawie zawsze wskazuje konkretny plik.

Drzewo decyzyjne naprawy błędu krytycznego WordPress Start: komunikat o błędzie krytycznym. Pytanie: czy masz mail od WordPressa z linkiem. Tak: wejdź w tryb odzyskiwania, dezaktywuj wskazaną wtyczkę lub motyw. Nie: włącz log błędów i odczytaj ścieżkę z linii Fatal error. Ścieżka w plugins: wyłącz wtyczkę. Ścieżka w themes: przełącz motyw. Komunikat Allowed memory size exhausted: zwiększ limit pamięci. Call to undefined function lub TypeError po zmianie PHP: wróć do poprzedniej wersji PHP lub zaktualizuj dodatek. Ścieżka w wp-includes lub wp-admin: podmień pliki rdzenia. Komunikat o błędzie krytycznym Masz mail od WordPressa z linkiem? tak Tryb odzyskiwania dezaktywuj dodatek wskazany w mailu nie Włącz log błędów WP_DEBUG_LOG albo error_log hostingu Co jest w linii „PHP Fatal error”? /plugins/ Wyłącz wtyczkę /themes/ Przełącz motyw Allowed memory size Zwiększ pamięć undefined function Wersja PHP lub aktualizacja /wp-includes/ Podmień rdzeń
Ścieżka do pliku w logu prawie zawsze rozstrzyga sprawę. Najczęściej trafiam na gałąź „wtyczka”.

Mail do administratora i tryb odzyskiwania

W polskim WordPressie ten mechanizm nazywa się w panelu trybem awaryjnym. W poradniku używam nazwy „tryb odzyskiwania” z dokumentacji (ang. recovery mode), ale na ekranie szukaj słowa „awaryjny”.

Gdy błąd pochodzi z konkretnej wtyczki albo motywu, WordPress wysyła wiadomość na adres e-mail administracji ustawiony w Ustawienia, Ogólne (albo na adres ze stałej RECOVERY_MODE_EMAIL, jeśli ktoś ją zdefiniował w wp-config.php). W angielskiej wersji temat brzmi „[Nazwa strony] Your Site is Experiencing a Technical Issue”. W polskiej instalacji brzmi „[Nazwa strony] Twoja witryna ma problemy techniczne”, więc szukaj w skrzynce słów „problemy techniczne” oraz nazwy swojej strony.

W treści maila znajdziesz trzy rzeczy, które od razu przydają się w naprawie: nazwę wtyczki lub motywu, który spowodował błąd, szczegóły błędu z nazwą pliku i numerem linii oraz specjalny link logowania.

  1. Znajdź mail, także w spamie

    WordPress wysyła go nie częściej niż raz na dobę. Jeśli awaria trwa od rana, a Ty skasowałeś pierwszą wiadomość, kolejna przyjdzie dopiero po upływie doby. Sprawdź folder spam, oferty i wszystkie skrzynki, które kiedyś mogły być wpisane jako adres administratora.

  2. Kliknij link do trybu odzyskiwania

    Link prowadzi do strony logowania z parametrem action=enter_recovery_mode i jednorazowymi kluczami. Po kliknięciu WordPress ustawia w przeglądarce specjalne ciasteczko i przekierowuje Cię na adres wp-login.php?action=entered_recovery_mode. Tam logujesz się zwykłym loginem i hasłem administratora. Link jest ważny około doby. Po tym czasie nie zadziała, a nowy przyjdzie dopiero przy kolejnym wystąpieniu błędu.

  3. Dezaktywuj wskazany dodatek

    W trybie odzyskiwania winna wtyczka lub motyw jest wstrzymany tylko w Twojej sesji. Panel działa, ale odwiedzający nadal widzą błąd. Wejdź w Wtyczki: przy wadliwej wtyczce zobaczysz opis błędu. Kliknij „Wyłącz”. Jeśli winny jest motyw, w Wygląd, Motywy włącz inny, najlepiej domyślny motyw WordPressa.

    Ekran Wtyczki w trybie awaryjnym WordPressa z opisem błędu E_ERROR przy wtyczce Stary Slider
    Zrzut ekranuEkran Wtyczki po wejściu z linku z maila. Przy wstrzymanej wtyczce WordPress pokazuje typ błędu, plik i numer linii. W polskim WordPressie ten tryb nazywa się trybem awaryjnym: u góry jest przycisk „Wyjdź z trybu awaryjnego”, a przy wtyczce link „Wznów”. Zrzut z testowej instalacji WordPress 7.1, ścieżki zanonimizowane.
  4. Wyjdź z trybu odzyskiwania i sprawdź stronę

    Na górnym pasku administracyjnym jest przycisk wyjścia z trybu odzyskiwania (w polskim WordPressie: „Wyjdź z trybu awaryjnego”). Kliknij go, a potem otwórz stronę w oknie prywatnym. Jeśli działa, masz czas na spokojne rozwiązanie problemu z wtyczką: aktualizację, cofnięcie wersji albo zamiennik.

Dlaczego mail czasem nie przychodzi
  • Błąd nie pochodzi z wtyczki ani motywu, tylko na przykład z rdzenia, z pliku wp-config.php albo z wtyczki w katalogu mu-plugins, która ładuje się wcześniej niż tryb odzyskiwania.
  • Adres administratora w ustawieniach jest stary, na przykład należy do byłego wykonawcy strony.
  • Serwer nie wysyła poczty albo poczta z serwera trafia do spamu.
  • Strona działa w trybie sieci (multisite). Tam tryb odzyskiwania nie jest dostępny.
  • Mail wyszedł już wcześniej tego dnia, a WordPress odczekuje dobę przed następnym.
  • Błąd wystąpił tylko na stronie dla odwiedzających. WordPress wysyła mail dopiero wtedy, gdy błąd pojawi się w panelu lub na stronie logowania, więc spróbuj wejść na /wp-admin/.

Bez maila: włącz log błędów

Jeśli maila nie ma, przyczynę wskaże log. WordPress ma wbudowany tryb debugowania sterowany trzema stałymi (opisanymi w dokumentacji debugowania WordPressa) w pliku wp-config.php, który leży w głównym katalogu strony (zwykle public_html lub katalog nazwany jak domena).

  1. Pobierz kopię pliku wp-config.php

    Połącz się przez FTP albo otwórz menedżer plików w panelu hostingu. Zanim cokolwiek zmienisz, pobierz wp-config.php na dysk. Jeden zgubiony średnik w tym pliku wyłącza całą stronę, a kopia pozwala to cofnąć w kilka sekund.

  2. Ustaw stałe debugowania

    Znajdź linię define( 'WP_DEBUG', false ); i zamień ją na poniższy blok. Wszystko musi się znaleźć powyżej komentarza /* That's all, stop editing! Happy publishing. */ (w spolszczonych plikach ten komentarz bywa przetłumaczony).

    define( 'WP_DEBUG', true );
    define( 'WP_DEBUG_LOG', true );
    define( 'WP_DEBUG_DISPLAY', false );
    @ini_set( 'display_errors', 0 );

    WP_DEBUG włącza raportowanie wszystkich błędów. WP_DEBUG_LOG zapisuje je do pliku wp-content/debug.log. WP_DEBUG_DISPLAY ustawione na false sprawia, że błędy nie pojawią się na ekranie odwiedzających. Zamiast true przy WP_DEBUG_LOG możesz podać pełną ścieżkę do pliku poza katalogiem publicznym, na przykład '/home/konto/logi/wp-debug.log'. To bezpieczniejsze, bo domyślny plik w wp-content bywa dostępny z przeglądarki.

  3. Wywołaj błąd jeszcze raz

    Otwórz w przeglądarce stronę, na której pojawia się komunikat. Jeśli błąd występuje tylko przy konkretnej akcji (dodanie do koszyka, wysłanie formularza, zapis wpisu), powtórz ją. Dopiero wtedy błąd trafi do logu.

  4. Otwórz wp-content/debug.log

    Pobierz plik przez FTP albo otwórz go w menedżerze plików. Przewiń na sam koniec: najnowsze wpisy są na dole. Szukaj linii zawierającej PHP Fatal error. Wpisy typu PHP Deprecated, PHP Notice czy PHP Warning zwykle nie są przyczyną awarii, choć warto je zanotować.

    Przez SSH wystarczy jedno polecenie:

    grep "PHP Fatal error" wp-content/debug.log | tail -n 5

Gdy debug.log się nie pojawia: log błędów hostingu

Jeśli błąd występuje bardzo wcześnie, zanim WordPress wczyta ustawienia debugowania, albo katalog wp-content nie ma praw zapisu, plik debug.log może w ogóle nie powstać. Wtedy szukaj logu samego serwera:

  • plik error_log w katalogu strony lub w katalogu, w którym wystąpił błąd (często tak jest na hostingach z cPanelem),
  • sekcja z logami w panelu hostingu, zwykle osobno log dostępu i log błędów dla każdej domeny,
  • katalog z logami w katalogu domowym konta, jeśli masz dostęp przez SSH.

Nazwy menu różnią się między hostingami, dlatego jeśli nie możesz znaleźć logów, napisz do pomocy technicznej hostingu z prośbą o fragment logu błędów PHP z ostatniej godziny. Zwykle dostaniesz go szybko.

Sekcja Logi i statystyki w panelu hostingu z plikiem error.log i linią PHP Fatal error
Widok poglądowyTak zwykle wygląda sekcja logów w panelu hostingu: osobno log dostępu i log błędów, a w podglądzie linia PHP Fatal error ze ścieżką do wtyczki. Nazwy menu różnią się między hostingami. Widok odtworzony na przykładowych danych.

Jak czytać linię „PHP Fatal error” w logu

Linia błędu wygląda na nieczytelną, ale ma stałą budowę. Dla diagnozy liczą się trzy elementy: rodzaj błędu, nazwa funkcji lub opis problemu oraz ścieżka do pliku. Ścieżka mówi, czyj to kod.

Anatomia linii błędu krytycznego w pliku debug.log Przykładowa linia z debug.log podzielona na części: 1 data i godzina, 2 poziom błędu PHP Fatal error, 3 opis Uncaught Error Call to undefined function create_function, 4 ścieżka do pliku z nazwą katalogu wtyczki i numerem linii. Najważniejsza jest nazwa katalogu po wp-content/plugins, bo wskazuje winną wtyczkę. [12-Oct-2026 08:14:03 UTC] PHP Fatal error: Uncaught Error: Call to undefined function create_function() in /home/konto/public_html/ wp-content/plugins/stary-slider/inc/slider.php:212 1 2 3 4 1 Kiedy Porównaj z godziną awarii. Stare wpisy mogą być nieistotne. 2 Poziom błędu Tylko „Fatal error” i „Parse error” zatrzymują stronę. 3 Co się stało Tu: wywołanie funkcji usuniętej w PHP 8.0. Opis wskazuje przyczynę. 4 Czyj to kod Katalog po plugins/ to nazwa wtyczki. Po dwukropku: numer linii w pliku.
Przykład jest wymyślony, ale treść błędu jest dokładnie taka, jaką zwraca PHP 8 przy wywołaniu usuniętej funkcji create_function().

Gdy w logu jest kilka linii, ważna jest pierwsza linia PHP Fatal error z czasem awarii. Pod nią często widać Stack trace, czyli listę wywołań, które doprowadziły do błędu. Jeśli sam błąd wskazuje plik rdzenia WordPressa, przejrzyj stack trace w poszukiwaniu pierwszej ścieżki z wp-content/plugins/ lub wp-content/themes/. Rdzeń rzadko psuje się sam. Częściej wtyczka przekazała mu złe dane.

Fragment komunikatuCo zwykle oznaczaCo zrobić
Call to undefined functionKod wywołuje funkcję usuniętą z PHP albo z innej, wyłączonej wtyczkiZaktualizuj dodatek, sprawdź wersję PHP lub zależności
Allowed memory size of … bytes exhaustedSkończył się limit pamięci PHPZwiększ WP_MEMORY_LIMIT, poszukaj wtyczki, która go zjada
Uncaught TypeErrorFunkcja dostała dane złego typu, częste po przejściu na PHP 8Zaktualizuj dodatek albo tymczasowo wróć do starszego PHP
Parse error: syntax errorBłąd w składni pliku, często po ręcznej edycjiPrzywróć plik z kopii lub cofnij swoją zmianę
Cannot redeclareDwie wtyczki lub motyw i wtyczka definiują tę samą funkcjęWyłącz jedną z nich, często starszą kopię tej samej wtyczki
Failed opening requiredBrakuje pliku, aktualizacja przerwała się w połowieZainstaluj ten dodatek lub rdzeń ponownie

Wyłączenie wtyczek bez dostępu do panelu

Jeśli log wskazał wtyczkę albo nie masz żadnej wskazówki, a awaria wystąpiła po zmianach we wtyczkach, wyłącz je z poziomu plików. WordPress, który nie znajdzie katalogu aktywnej wtyczki, po prostu jej nie załaduje. Ustawienia wtyczki w bazie danych zostają, więc po przywróceniu nazwy nic nie tracisz.

  1. Wyłącz jedną wtyczkę wskazaną w logu

    W katalogu wp-content/plugins/ zmień nazwę katalogu winnej wtyczki, na przykład z stary-slider na stary-slider.off. Odśwież stronę. Jeśli działa, przyczyna jest potwierdzona.

  2. Bez wskazówki: wyłącz wszystkie naraz

    Zmień nazwę całego katalogu plugins na plugins.off. Jeśli strona wróci (zwykle z innym wyglądem, bo brakuje funkcji wtyczek), przyczyna leży w jednej z nich. Przywróć nazwę plugins, a potem wyłączaj wtyczki pojedynczo, zaczynając od ostatnio aktualizowanych.

  3. Pamiętaj o mu-plugins

    Wtyczki z katalogu wp-content/mu-plugins/ ładują się zawsze i nie widać ich na zwykłej liście. Często instaluje je hosting albo wtyczka do cache. Jeśli log wskazuje ten katalog, wyłącz pojedynczy plik, zmieniając jego rozszerzenie z .php na .php.off.

Z dostępem SSH i zainstalowanym WP-CLI zrobisz to samo szybciej. Opcje --skip-plugins i --skip-themes pozwalają uruchomić polecenie bez ładowania wtyczek i motywu, więc działa nawet wtedy, gdy strona jest całkowicie zepsuta:

# lista wtyczek z wersjami, bez ładowania ich kodu
wp plugin list --skip-plugins --skip-themes

# wyłączenie jednej wtyczki
wp plugin deactivate stary-slider --skip-plugins --skip-themes

# wyłączenie wszystkich wtyczek
wp plugin deactivate --all --skip-plugins --skip-themes
Zanotuj, co było włączone

Przed wp plugin deactivate --all zapisz wynik wp plugin list --status=active --skip-plugins --skip-themes. Po naprawie włączysz z tej listy tylko to, co było aktywne. Na stronie sklepu wyłączenie wszystkich wtyczek wyłącza też WooCommerce, więc sklep przestaje przyjmować zamówienia do czasu ich ponownego włączenia.

Przełączenie motywu

Jeśli ścieżka w logu prowadzi do wp-content/themes/, winny jest motyw albo motyw potomny (child theme). Najczęściej plik functions.php po ręcznej edycji lub stary motyw kupiony lata temu, który nie był aktualizowany.

  • Przez WP-CLI: wp theme activate twentytwentyfive --skip-plugins --skip-themes. Nazwę domyślnego motywu, który masz zainstalowany, sprawdzisz poleceniem wp theme list --skip-plugins --skip-themes.
  • Przez FTP: zmień nazwę katalogu aktywnego motywu, na przykład dodając .off. Gdy wejdziesz potem w Wygląd, Motywy, WordPress zauważy brak motywu i przełączy się na motyw domyślny, jeśli jest zainstalowany. Jeśli nie ma żadnego motywu domyślnego, wgraj go najpierw z wordpress.org.

Przełączenie motywu zmienia wygląd strony, a część ustawień, takich jak menu i widżety, trzeba będzie być może po powrocie przypisać ponownie. Dlatego traktuj to jako diagnozę, a nie rozwiązanie. Docelowo naprawiasz albo aktualizujesz swój motyw.

Limit pamięci PHP

Komunikat Allowed memory size of 134217728 bytes exhausted mówi, że skrypt próbował użyć więcej pamięci, niż pozwala ustawienie memory_limit (134217728 bajtów to 128 MB). Typowe sytuacje: duży import produktów, generowanie miniatur dużych zdjęć, rozbudowany kreator stron albo wtyczka, która wpadła w pętlę.

WordPress ma dwie stałe do sterowania pamięcią. Dodaj je w wp-config.php nad komentarzem „stop editing”:

define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

WP_MEMORY_LIMIT dotyczy strony, WP_MAX_MEMORY_LIMIT zadań w panelu, na przykład obróbki obrazów. WordPress może podnieść limit tylko do wartości, na którą pozwala serwer. Jeśli hosting ustawił twardy limit, zmiana w wp-config.php nic nie da i trzeba podnieść memory_limit w ustawieniach PHP w panelu hostingu albo poprosić o to pomoc techniczną.

Więcej pamięci to czasem tylko odroczenie

Jeśli strona działała latami na 128 MB, a nagle potrzebuje 512 MB, to zwykle któraś wtyczka zachowuje się źle. Zwiększenie limitu przywraca stronę, ale warto sprawdzić w logu, który plik zużywał pamięć w chwili błędu.

Wersja PHP

Duża część błędów krytycznych pojawia się dzień po tym, jak hosting podniósł wersję PHP. Funkcje takie jak create_function() czy each() zostały usunięte w PHP 8.0, a wiele sytuacji, które w PHP 7.4 kończyły się ostrzeżeniem, w PHP 8 przerywa działanie strony. Stare wtyczki i motywy, których nikt nie aktualizował, przestają wtedy działać.

Wersję PHP sprawdzisz w panelu hostingu albo w WordPressie w Narzędzia, Zdrowie witryny, Informacje, sekcja Serwer (jeśli panel działa). Szybkie obejście to tymczasowy powrót do poprzedniej wersji PHP w panelu hostingu. Docelowe rozwiązanie to aktualizacja albo wymiana dodatku. Cały proces opisuję w artykule Strona nie działa po zmianie PHP.

Uszkodzone pliki rdzenia WordPress

Rzadziej przyczyną jest sam WordPress: aktualizacja przerwana w połowie z powodu limitu czasu, brak miejsca na dysku albo ręcznie skasowany plik. W logu zobaczysz wtedy ścieżki do wp-includes/ lub wp-admin/ i komunikaty w rodzaju Failed opening required.

Przez WP-CLI sprawdzisz pliki rdzenia z sumami kontrolnymi i pobierzesz je ponownie w tej samej wersji:

wp core verify-checksums --skip-plugins --skip-themes
wp core download --version=$(wp core version --skip-plugins --skip-themes) --force --skip-content

Bez SSH pobierz z archiwum wydań WordPressa paczkę w tej samej wersji, którą masz (numer jest w pliku wp-includes/version.php), rozpakuj ją na komputerze i wgraj przez FTP tylko katalogi wp-admin i wp-includes oraz pliki z głównego katalogu z wyjątkiem wp-config-sample.php. Nie wgrywaj katalogu wp-content, bo nadpiszesz swoje motywy i wtyczki.

Nie nadpisuj wp-config.php ani wp-content

W wp-config.php są dane dostępu do bazy, a w wp-content Twoje motywy, wtyczki i zdjęcia. Paczka WordPressa nie zawiera pliku wp-config.php, ale zawiera katalog wp-content z domyślnymi motywami, dlatego ten katalog pomiń przy wgrywaniu.

Jeśli pliki rdzenia zmieniły się bez Twojego udziału, a w katalogach pojawiły się obce pliki PHP, problem może nie być awarią, tylko włamaniem. Wtedy przeczytaj jak sprawdzić, czy strona została zhakowana.

Typowy scenariusz

W poniedziałek rano sklep pokazuje komunikat o błędzie krytycznym, a panel też nie działa. Właściciel nie dostał żadnego maila, bo adres administratora w ustawieniach należy do agencji, która robiła stronę kilka lat temu. Po włączeniu WP_DEBUG_LOG w logu widać Call to undefined function create_function() w pliku starej wtyczki do wyświetlania opinii. W piątek wieczorem hosting przełączył konto na PHP 8. Zmiana nazwy katalogu wtyczki przywraca sklep w kilka minut. Wtyczka nie miała aktualizacji od lat, więc docelowo zostaje zastąpiona inną, a adres administratora w ustawieniach zmieniony na adres właściciela.

Po naprawie: wyłącz debugowanie i zapobiegaj

Kiedy strona działa, posprzątaj po diagnostyce. Zostawione debugowanie to ryzyko bezpieczeństwa i źródło kolejnych problemów.

  1. Przywróć ustawienia debugowania

    W wp-config.php ustaw define( 'WP_DEBUG', false ); i usuń dodane linie WP_DEBUG_LOG, WP_DEBUG_DISPLAY oraz @ini_set. Najprościej wgrać kopię pliku pobraną przed zmianami, jeśli w międzyczasie nie zmieniałeś w nim nic innego, na przykład limitu pamięci.

  2. Usuń debug.log

    Plik wp-content/debug.log zawiera ścieżki serwera i szczegóły kodu. Pobierz go na dysk, jeśli chcesz go zachować, a z serwera usuń.

  3. Zaktualizuj adres e-mail administratora

    W Ustawienia, Ogólne wpisz adres, który naprawdę czytasz. Zmiana wymaga potwierdzenia linkiem wysłanym na nowy adres. Dzięki temu przy następnej awarii dostaniesz mail z linkiem do trybu odzyskiwania.

  4. Rozwiąż przyczynę, a nie tylko objaw

    Wyłączona wtyczka nie robi tego, do czego była potrzebna. Sprawdź, czy jest nowsza wersja zgodna z Twoim PHP, czy autor jeszcze ją rozwija, a jeśli nie, znajdź zamiennik. Jeśli awaria wystąpiła po aktualizacji, przeczytaj, jak cofnąć aktualizację i aktualizować bezpiecznie.

Kiedy nie robić tego samemu

Opisane kroki są bezpieczne, jeśli robisz kopię każdego pliku przed zmianą. Gdy jednak coś z poniższej listy dotyczy Twojej strony, rozważ zlecenie naprawy:

  • sklep stoi, a każda godzina to utracone zamówienia,
  • nie masz dostępu do FTP ani panelu hostingu, bo wszystko jest na koncie byłego wykonawcy (zobacz jak odzyskać dostęp do strony, hostingu i domeny),
  • log wskazuje rdzeń WordPressa albo kod, którego nie rozumiesz, a stack trace ma kilkadziesiąt linii,
  • winny jest motyw z dużą liczbą zmian wprowadzonych na zamówienie i jego wyłączenie rozsypuje całą stronę,
  • po naprawie błąd wraca, na przykład co noc po automatycznych zadaniach.

Szersze omówienie cen i zakresu prac znajdziesz w artykule Ile kosztuje naprawa strony internetowej.

Strona dalej pokazuje błąd krytyczny?

Znajdę przyczynę w logach i przywrócę stronę. Naprawa jednej awarii w ramach Szybkiej Interwencji kosztuje 299 zł netto i obejmuje 7 dni gwarancji. Zgłoszenia awaryjne przyjmuję całą dobę.

Najczęstsze pytania

Czy błąd krytyczny oznacza, że straciłem stronę lub dane?

Prawie nigdy. Błąd krytyczny to przerwane wykonanie kodu PHP, a nie usunięcie plików czy bazy danych. Wpisy, zamówienia i zdjęcia zwykle są nienaruszone i wracają, gdy tylko usuniesz przyczynę, najczęściej wadliwą wtyczkę lub motyw.

Nie dostałem maila z linkiem do trybu odzyskiwania. Dlaczego?

WordPress wysyła ten mail tylko wtedy, gdy rozpozna, że błąd pochodzi z konkretnej wtyczki lub motywu i wystąpił w panelu lub na stronie logowania, i nie częściej niż raz na dobę. Mail trafia na adres e-mail administracji z ustawień ogólnych, który bywa nieaktualny, a wysyłka z serwera często ląduje w spamie albo nie działa wcale. Wtedy przyczynę znajdziesz w logu błędów.

Czy mogę zostawić włączone WP_DEBUG na stałe?

Nie na stronie produkcyjnej. Wyświetlane błędy zdradzają ścieżki na serwerze i szczegóły kodu, a plik debug.log w domyślnym miejscu bywa dostępny z przeglądarki i potrafi urosnąć do setek megabajtów. Po naprawie ustaw WP_DEBUG na false albo przynajmniej wyłącz wyświetlanie i przenieś log poza katalog publiczny.

Błąd krytyczny pojawia się tylko na jednej podstronie. Co to znaczy?

Że błędny kod uruchamia się tylko w określonej sytuacji, na przykład w koszyku sklepu, przy formularzu kontaktowym albo w konkretnym szablonie strony. Diagnostyka jest taka sama: wejdź na tę podstronę z włączonym logowaniem błędów i sprawdź w debug.log, który plik zgłasza błąd.

Czy przywrócenie kopii zapasowej naprawi błąd krytyczny?

Często tak, ale stracisz zmiany od dnia kopii, w sklepie także zamówienia. Lepiej najpierw sprawdzić log: jeśli winna jest jedna wtyczka, wystarczy ją wyłączyć albo cofnąć do poprzedniej wersji, co trwa kilka minut i nie rusza bazy danych.

Grzegorz Wojterzak naprawia strony internetowe po awariach i włamaniach: WordPress, WooCommerce, PHP i Node.js. Od ponad dekady pracuje przy stronach i sklepach internetowych polskich firm.