Strona nie działa? Zadzwoń.

Tworzenie Stron Rzeszów to marka firmy Prownex IT Services Sp. z o.o. (NIP 8161717256). Tworzymy strony internetowe i sklepy dla małych i średnich firm z Rzeszowa i okolic, utrzymujemy je na własnym hostingu prowde All Inclusive oraz naprawiamy, zabezpieczamy i przenosimy istniejące strony WordPress.

Strona na Elementorze z 2018 roku: kiedy przestanie działać

Sprawdziliśmy, co się dzieje ze stroną zbudowaną w 2018 roku na Elementorze, gdy hosting podnosi wersję PHP albo ktoś klika „aktualizuj”. Bez aktualizacji strona działa do PHP 7.4. Na PHP 8 każda podstrona jest biała, a do panelu nie da się wejść.

Ilustracja: stare okno przeglądarki z układem strony z bloków, klucz płaski, pęknięta klepsydra i trójkąt ostrzegawczy

Opublikowano: 03.11.2026 · stan na listopad 2026 · Redakcja Tworzenie Stron Rzeszów

W skrócie

Strona
typowa strona firmowa z 2018 roku: WordPress, Elementor, popularny motyw i dodatki, formularz kontaktowy, galeria, opinie klientów
Pytanie
przy jakiej wersji PHP (języka, w którym działa WordPress na serwerze) i przy jakiej wersji WordPressa strona przestaje działać
Odpowiedź
bez żadnych aktualizacji strona działa do PHP 7.4; na PHP 8 jest biała na każdej podstronie
Co dało się zaktualizować
sam WordPress, krok po kroku aż do wersji 7.1, na PHP 7.4: strona, edytor i formularz działały
Co ją psuje
zmiana PHP na 8 przez hosting; aktualizacja samego Elementora przy starym dodatku
Wniosek
strona z 2018 roku ma termin ważności. Wyznacza go hosting, a nie właściciel

Strona działa, dopóki hosting nie zmieni PHP

Do nas trafiają strony zbudowane kilka lat temu na Elementorze, których nikt od dawna nie aktualizował. Działają, klienci dzwonią z formularza, więc właściciel nie widzi powodu, żeby coś ruszać. Wtedy przychodzi e-mail od hostingu: „od przyszłego miesiąca PHP 7.4 nie będzie dostępne”. Albo ktoś w panelu klika „Zaktualizuj teraz”, bo WordPress od miesięcy o to prosi.

Właściciel pyta wtedy o dwie rzeczy: czy strona to przeżyje i czy da się ją uratować aktualizacjami, czy trzeba budować od nowa. Żeby odpowiadać na to liczbami, a nie na wyczucie, zbudowaliśmy w naszym środowisku taką stronę jak w 2018 roku, z tymi samymi wersjami wszystkich elementów, i sprawdziliśmy ją na każdej kolejnej wersji PHP i WordPressa.

Jak sprawdzaliśmy

  • Strona jak z 2018 roku: pięć podstron (strona główna, o nas, oferta, realizacje, kontakt), blog, formularz kontaktowy. Typowe elementy Elementora: duże zdjęcie z napisem, przyciski, ikony, liczniki „15 lat doświadczenia”, karuzela i galeria realizacji, zakładki, rozwijane pytania, opinie klientów, film, mapa, cennik.
  • Droga pierwsza, „nic nie ruszamy”: ta sama strona na każdej kolejnej wersji PHP, od 5.6 do najnowszej 8.5.
  • Droga druga, „aktualizujemy WordPress”: WordPress krok po kroku od 4.9 do 7.1, a Elementor, motyw i wtyczki zostają z 2018 roku.
  • Droga trzecia, „aktualizujemy Elementor”: sam Elementor do nowszych wersji, motyw i dodatek zostają stare.
  • Za każdym razem to samo sprawdzenie: czy każda podstrona się otwiera i wygląda tak samo jak przed zmianą, czy działają karuzela, liczniki i zakładki, czy da się zalogować do panelu, czy edytor Elementora się otwiera i zapisuje zmiany, czy formularz wysyła wiadomość i czy e-mail dochodzi. Do tego zapis wszystkich błędów serwera.

Droga pierwsza: nic nie aktualizujemy, hosting zmienia PHP

PHP Co widzi klient i właściciel
5.6 do 7.2 wszystko działa
7.3 i 7.4 dla gości działa; serwer zapisuje ostrzeżenia. Na hostingu, który pokazuje błędy na stronie: ostrzeżenie na górze każdej podstrony, rozjechany nagłówek i brak możliwości zalogowania do panelu
8.0 i każde nowsze (8.1 do 8.5) biała strona na wszystkich podstronach, panel też nie działa, formularz niedostępny

Na PHP 8 klient nie widzi nawet komunikatu o błędzie, tylko pustą białą stronę. Google dostaje błąd serwera na każdym adresie.

Droga druga: aktualizujemy WordPress, reszta zostaje z 2018 roku

WordPress Na PHP 7.4 (lub 7.3 dla starszych) Na nowszym PHP, które ta wersja WordPressa zaleca
5.0 (nowy edytor bloków) do 5.5 działa (te wersje nie obsługują PHP 8)
5.6 do 7.1 działa, z ostrzeżeniami w logu strona dla gości działa, ale panel pokazuje „W witrynie wystąpił krytyczny błąd.” na kokpicie, liście wtyczek i liście stron

Najważniejsze: WordPress 7.0 i 7.1 wymagają co najmniej PHP 7.4, a wtyczki z 2018 roku na PHP 8 psują panel. Jedyna wersja PHP, na której stara strona i nowy WordPress działają razem, to 7.4. Ta wersja nie dostaje poprawek bezpieczeństwa od listopada 2022 roku i coraz więcej hostingów ją wyłącza (stan na listopad 2026).

Tak wygląda panel po aktualizacji WordPressa na PHP 8

Strona dla gości działa normalnie, formularz wysyła wiadomości, a właściciel po zalogowaniu widzi tylko „W witrynie wystąpił krytyczny błąd.”. Przyczyną jest stary Elementor, który pyta serwer swojego producenta o nowości, a ten dziś odpowiada w innym formacie niż w 2018 roku.

Zrzut ekranu: kokpit WordPressa fikcyjnej firmy remontowej z komunikatem „W witrynie wystąpił krytyczny błąd” pod powiadomieniami wtyczek

Droga trzecia: aktualizujemy Elementor, motyw i dodatek zostają stare

Elementor Co się stało
2.9 i 3.0 strona działa; edytor ostrzega, że układ starych stron mógł się zmienić; zapis działa; podstrony o kilka do kilkudziesięciu pikseli niższe
3.5 edytor się nie otwiera, komunikat o brakującym „kicie” (ustawieniach witryny); po ręcznym „Odtwórz kit” działa
3.6 do 4.3 (najnowszy) strona główna i oferta z błędem krytycznym, edytor się nie otwiera; podstrony bez elementów dodatku działają

Strona główna po aktualizacji samego Elementora

Jedno kliknięcie „aktualizuj” przy Elementorze i strona główna pokazuje gościom tylko ten komunikat. Dodatek z 2018 roku korzysta z elementów, które nowy Elementor usunął, więc pada każda podstrona, na której jest choć jeden jego element.

Zrzut ekranu: biała strona z ramką „W witrynie wystąpił błąd krytyczny” i linkiem do pomocy WordPressa zamiast strony głównej

Pełna aktualizacja wszystkiego naraz

WordPress 7.1, Elementor 4.3, nowe wersje dodatku, motywu, formularza i Yoasta na PHP 8.3, 8.4 i 8.5: wszystkie podstrony się otwierają, liczniki, karuzele, zakładki i galeria działają, formularz wysyła wiadomości, w logu błędów zostały pojedyncze uwagi.

Dwie rzeczy trzeba było zrobić ręcznie. Edytor nie otwierał się, dopóki w narzędziach Elementora nie odtworzyliśmy „kitu”. A wygląd się zmienił: inaczej ułożona ramka „Planujesz remont?”, niższa karuzela realizacji, inne kolory stopki i jedna ikona (zegar przy godzinach otwarcia) zniknęła. Najnowszy Contact Form 7 wymaga PHP 8.3, więc tej aktualizacji nie da się zrobić na PHP 7.4 (stan na listopad 2026).

Zrzut ekranu: strona główna fikcyjnej firmy remontowej po pełnej aktualizacji na PHP 8.3, z nagłówkiem „Remonty mieszkań i domów bez stresu” i trzema usługami

Dlaczego tak się dzieje

Strona z 2018 roku to kilka programów od różnych firm, napisanych pod ówczesne PHP i ówczesny WordPress. Każda nowa wersja PHP coś usuwa albo zaostrza. Każda nowa wersja Elementora też coś usuwa. Program, który korzysta z usuniętego elementu, nie „trochę zwalnia”, tylko zatrzymuje całą stronę.

W naszym teście trzy rzeczy zatrzymywały stronę w trzech różnych miejscach:

  1. Sam WordPress z 2018 roku korzysta z funkcji, której PHP 8 już nie ma. Pada, zanim w ogóle dojdzie do wyświetlenia strony, więc żadna wtyczka tu nie pomoże.
  2. Stary Elementor pyta serwer firmy Elementor o nowości dla panelu. Dziś ten serwer odpowiada w innym formacie niż w 2018 roku. PHP 7 kończył to ostrzeżeniem w logu, PHP 8 zatrzymuje cały panel.
  3. Dodatek do Elementora z 2018 roku korzysta z elementów, które nowy Elementor usunął. Po aktualizacji samego Elementora pada każda podstrona, na której jest choć jeden element tego dodatku.

Co nie było oczywiste

  1. „Automatyczne aktualizacje bezpieczeństwa” nie ratują. WordPress 4.9 do dziś dostaje poprawki (najnowsza 4.9.35). Na PHP 8 daje dokładnie ten sam błąd i tę samą białą stronę co wersja z 2018 roku.
  2. Strona może „działać” dla gości, a panel już nie. Po aktualizacji WordPressa na PHP 8 goście widzieli normalną stronę, formularz wysyłał wiadomości, a właściciel po zalogowaniu widział tylko „W witrynie wystąpił krytyczny błąd.”. Przyczyną nie była żadna zmiana na stronie, tylko odpowiedź serwera firmy Elementor, która zmieniła format po latach. Bez dostępu do tego serwera ten sam panel działał.
  3. Ustawienie hostingu może zepsuć stronę już na PHP 7.3. Hostingi, które pokazują błędy PHP na stronie (częste w tańszych ofertach), wyświetlały ostrzeżenie nad nagłówkiem. To jedno zdanie przestawiało przeglądarkę w tryb zgodności: nagłówek się rozjeżdżał, znikało duże zdjęcie, a logowanie do panelu wracało do formularza logowania. Dotyczy stron po polsku, bo ostrzeżenie pochodzi z kodu obsługującego polskie tłumaczenie.
  4. Aktualizacja samego Elementora jest groźniejsza niż aktualizacja WordPressa. WordPress przeszedł od 4.9 do 7.1 bez awarii frontu. Jedno kliknięcie „aktualizuj” przy Elementorze wyłączyło stronę główną, bo dodatek z 2018 roku nie pasuje do nowego Elementora.
  5. Po aktualizacji z panelu edytor może się po prostu nie otworzyć. Przy przejściu ze starego Elementora na wersję 3.5 lub nowszą znikają „ustawienia witryny” (tzw. kit), bo nowy Elementor tworzy je tylko przy pierwszej instalacji. Strona dla gości wygląda normalnie, a właściciel widzi komunikat po angielsku. Naprawa to jeden przycisk w narzędziach Elementora, ale trzeba wiedzieć, którego szukać.
  6. Przy ręcznej aktualizacji przez FTP można dostać mieszankę dwóch wersji. Kolejne wydania WordPressa mają pliki o identycznej dacie i rozmiarze, choć o innej treści (w naszym przypadku sześć plików, w tym ten z numerem wersji). Program, który kopiuje „tylko zmienione pliki”, pominie je. Sami na to trafiliśmy w teście.

Co polecamy właścicielowi strony z 2018 roku

  • Zanim hosting zmieni PHP: sprawdźcie, na jakim PHP działa strona i do kiedy hosting je utrzyma. Jeśli to 7.4 lub starsze, strona ma datę ważności niezależną od Was.
  • Bezpiecznie, na kopii strony, da się: zaktualizować sam WordPress, krok po kroku, zostając na PHP 7.4. W teście strona, edytor i formularz przeszły wszystkie wydania do 7.1. To daje czas, ale nie rozwiązuje problemu, bo PHP 7.4 samo jest bez wsparcia.
  • Nie robić na żywej stronie: aktualizacji samego Elementora przy starym dodatku i motywie. W teście kończyło się to błędem krytycznym strony głównej albo niedziałającym edytorem.
  • Przejście na PHP 8 wymaga wymiany wszystkich elementów naraz (WordPress, Elementor, dodatki, motyw, formularz). W teście po takiej wymianie strona działała na PHP 8.3 do 8.5, ale wymagała ręcznych kroków (odtworzenie ustawień Elementora) i poprawek wyglądu na każdej podstronie. To robota na kopii strony, z listą rzeczy do sprawdzenia.
  • Kiedy tylko przebudowa: gdy dodatek lub motyw z 2018 roku nie ma już nowszej wersji albo gdy po pełnej aktualizacji trzeba poprawiać większość podstron. Wtedy przebudowa na aktualnych wersjach kosztuje podobnie, a daje stronę na kolejne lata.
  • Zawsze: kopia zapasowa przed każdą zmianą i test na kopii, nie na żywej stronie.

Wnioski dla właściciela strony

  • Strona z 2018 roku na Elementorze działa do PHP 7.4. Na PHP 8 nie działa wcale, a o tym, kiedy to nastąpi, decyduje hosting.
  • Aktualizacje kupują czas tylko w jednej kolejności i tylko na wersji PHP, która sama jest już bez wsparcia.
  • Najczęstsza przyczyna nagłej awarii to nie WordPress, tylko aktualizacja jednej wtyczki, która nie pasuje do pozostałych.
  • Zanim ktoś kliknie „aktualizuj”, warto wiedzieć, które elementy strony się ze sobą gryzą. Sprawdzenie tego na kopii trwa godziny, naprawa po awarii na żywej stronie dni.

Sprawdzimy kopię Twojej strony na nowym PHP, zanim zrobi to hosting: opisz stronę w formularzu. Gdy strona już pokazuje białą stronę albo błąd krytyczny, zacznij od naprawy strony WordPress. Dlaczego stare PHP to dziś ryzyko, wyjaśnia poradnik o lukach PHP2Shell, a co daje przebudowa, gdy łatanie się nie opłaca, pokazuje przebudowa strony WordPress 1:1.

Opis techniczny: komunikaty błędów, mechanizmy i macierz wersji

Dla administratorów: pełny przebieg z dokładnymi komunikatami, mechanizmem każdego błędu i macierzą wyników. Wersje: stan na listopad 2026.

W skrócie

ElementSzczegóły
StronaWordPress 4.9.8 pl_PL, Elementor 2.3.4 (29.11.2018), OceanWP 1.5.32 + Ocean Extra 1.4.28, Essential Addons for Elementor (EAEL) 2.8.3, Contact Form 7 5.0.5, Yoast SEO 9.2; Apache 2.4 + mod_php (oficjalne obrazy php:<wersja>-apache), MySQL 5.7.44
Ścieżka 1strona zamrożona, PHP 5.6.40, 7.0.33, 7.1.33, 7.2.34, 7.3.33, 7.4.33, 8.0.30, 8.1.34, 8.2.35, 8.3.36, 8.4.27, 8.5.12
Ścieżka 2WordPress aktualizowany (pliki pakietu pl_PL + wp core update-db) przez 4.9.35, 5.0.31, 5.1.28, 5.2.30, 5.3.27, 5.4.25, 5.5.24, 5.6.23, 5.7.21, 5.8.19, 5.9.20, 6.0.18, 6.2.15, 6.4.14, 6.6.11, 6.8.12, 6.9.11, 7.0.8, 7.1.4; każda wersja na PHP 7.3/7.4 i na najwyższym PHP z oficjalnej tabeli zgodności; WP 7.1.4 na 7.4 i 8.0–8.5
Ścieżka 3WP 7.1.4 + PHP 7.4, Elementor z 2.3.4 jednym skokiem do 2.9.14, 3.0.16, 3.5.6, 3.6.8, 3.13.4, 3.35.9, 4.3.5; EAEL, OceanWP, Ocean Extra, CF7, Yoast z 2018
Pierwsza awaria, ścieżka 1PHP 8.0: Call to undefined function get_magic_quotes_gpc(), HTTP 500 na wszystkich adresach
Pierwsza awaria, ścieżka 2na PHP 7.4 żadna do WP 7.1.4; na PHP 8.0+ (WP 5.6 i nowsze) kokpit: Uncaught TypeError: json_decode() w elementor/includes/api.php:111
Pierwsza awaria, ścieżka 32.9.14 i 3.0.16: działa (okno „Note: Flexbox Changes”, błąd JS Ocean Extra bez wpływu na zapis); 3.5.6: edytor bez kitu; 3.6.8: Class 'Elementor\Scheme_Typography' not found (EAEL), HTTP 500

Środowisko i metoda

  • Wersje z 2018 z oficjalnych archiwów: rdzeń z pl.wordpress.org/wordpress-4.9.8-pl_PL.zip, wtyczki i motyw z downloads.wordpress.org w konkretnych wersjach (tagi Elementora < 3.0 i Yoasta < 18.0 są już usunięte z SVN wtyczek, ale archiwa zip nadal się pobierają). Stan wybrany na 30.11.2018, tuż przed WordPressem 5.0. Tłumaczenia wtyczek z paczek językowych z tamtego okresu (Elementor 2.2.7, CF7 4.9, Yoast 8.4).
  • Treść: strony zbudowane z JSON-a w formacie _elementor_data Elementora 2.3 i zapisane przez Document::save(), czyli tak jak zapisuje edytor. Widżety Elementora: heading, text-editor, button, icon-box, image, icon-list, counter, image-carousel (slick), testimonial, star-rating, tabs, progress, video, image-box, accordion, toggle, image-gallery z lightboxem, social-icons, google_maps, shortcode z formularzem CF7; sekcje z tłem background-attachment: fixed (w darmowym Elementorze 2.x to jest „paralaksa”; ruchoma paralaksa przyszła w Pro 2.5). EAEL: fancy-text, creative-button, cta-box, team-member, testimonial, pricing-table, info-box, flip-box, contact-form-7. Ikony Font Awesome 4 (fa fa-…), jak w Elementorze przed 2.6.
  • Serwer: display_errors = Off, log_errors = On, error_reporting = E_ALL; w wp-config.php WP_DEBUG = true, WP_DEBUG_DISPLAY = false (gość widzi to co na produkcji, log ma wszystko). Osobny wariant „tani hosting”: WP_DEBUG = false i display_errors = On. Ruch wychodzący zablokowany (WP_HTTP_BLOCK_EXTERNAL) z wyjątkiem my.elementor.com, żeby stary Elementor rozmawiał ze swoim API jak żywa strona.
  • Kontrola każdego przebiegu (Playwright, Chromium): 7 adresów (5 stron Elementora, blog, wpis): kod HTTP, błędy JS (pageerror, konsola), stan widżetów w DOM (karuzela zainicjowana, liczniki doliczyły do 15/450/98/6, aktywna zakładka, paski postępu, tekst EAEL, liczba obrazów galerii, formularz), zrzut całej strony porównany pikselowo ze stanem bazowym; logowanie, kokpit, wtyczki, lista stron, edycja strony w edytorze WordPressa; edytor Elementora (wczytanie podglądu, kliknięcie widżetu, zapis save_builder); formularz CF7 (odpowiedź REST i e-mail w Mailpit); log PHP pogrupowany po komunikacie.
  • Stan bazowy: PHP 7.2.34 + WP 4.9.8: 7/7 adresów 200, 0 błędów JS, edytor wczytuje się w 1,6–2,2 s i zapisuje, e-mail z formularza dochodzi, jQuery 1.12.4 + jQuery Migrate 1.4.1. W logu jedno ostrzeżenie z API Elementora (niżej). W edytorze już w 2018 jest błąd JS ReferenceError: butterbean is not defined (skrypt metaboxa Ocean Extra), który niczego nie blokuje.

Ścieżka 1: zamrożona strona na kolejnych PHP

PHPFront (7 adresów)PanelEdytor ElementoraFormularzLog PHP (przebieg)Werdykt
5.6.40200, bez zmianOKOK, zapis OKOK1 Warning (API Elementora)działa
7.0.33200OKOKOK1 Warningdziała
7.1.33200OKOKOK1 Warningdziała
7.2.34200OKOKOK1 Warningdziała (stan bazowy)
7.3.33200OKOKOK33 Warning, 35 Noticedziała z ostrzeżeniami
7.4.33200OKOKOK33 Warning, 123 Notice, 2017 Deprecateddziała z ostrzeżeniami
8.0.30500, pusta strona (39 bajtów)logowanie niedostępneniedostępnyniedostępny18 Fatalbłąd krytyczny
8.1.34 do 8.5.12500, pusta stronaniedostępnyniedostępnyniedostępny9 Fatal + 108–279 Deprecatedbłąd krytyczny

PHP 7.3, rdzeń WordPressa 4.9.8:

PHP Warning:  "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/html/wp-includes/pomo/plural-forms.php on line 210
PHP Notice:  compact(): Undefined variable: groupby in /var/www/html/wp-includes/class-wp-comment-query.php on line 853
PHP Notice:  compact(): Undefined variable: ID in /var/www/html/wp-includes/post.php on line 3387

PHP 7.3 zaczął ostrzegać przy continue wewnątrz switch (ostrzeżenie kompilacji, przy każdym wczytaniu pliku) i przy compact() z nieistniejącą zmienną. Późniejsze wydania WordPressa już tych wpisów nie dają (4.9.35 i 5.0.31 na PHP 7.3/7.4 w naszym teście).

PHP 7.4, dodatkowo:

PHP Deprecated:  Function get_magic_quotes_gpc() is deprecated in /var/www/html/wp-includes/load.php on line 651
PHP Deprecated:  Function get_magic_quotes_gpc() is deprecated in /var/www/html/wp-includes/formatting.php on line 4358
PHP Deprecated:  Array and string offset access syntax with curly braces is deprecated in /var/www/html/wp-includes/class-wp-editor.php on line 730
PHP Notice:  Trying to access array offset on value of type null in /var/www/html/wp-content/plugins/elementor/includes/base/controls-stack.php on line 1416
PHP Notice:  Trying to access array offset on value of type null in /var/www/html/wp-content/plugins/essential-addons-for-elementor-lite/elements/pricing-table/pricing-table.php on line 1711
PHP Notice:  Trying to access array offset on value of type bool in /var/www/html/wp-content/plugins/essential-addons-for-elementor-lite/elements/flipbox/flipbox.php on line 1147

Samo get_magic_quotes_gpc() dało 2009 wpisów w jednym przebiegu (formatting.php linia 4358 przy każdym wp_unslash z formularza i stripslashes_deep). Na produkcji z WP_DEBUG = false notice i deprecated nie trafiają do logu.

PHP 8.0 i nowsze, każde żądanie, także wp-login.php i wp-admin:

PHP Fatal error:  Uncaught Error: Call to undefined function get_magic_quotes_gpc() in /var/www/html/wp-includes/load.php:651
Stack trace:
#0 /var/www/html/wp-settings.php(333): wp_magic_quotes()
#1 /var/www/html/wp-config.php(112): require_once('/var/www/html/w...')
#2 /var/www/html/wp-load.php(37): require_once('/var/www/html/w...')
#3 /var/www/html/wp-blog-header.php(13): require_once('/var/www/html/w...')

Mechanizm: PHP 8.0 usunął get_magic_quotes_gpc() (deprecated od 7.4). WordPress 4.9.8 woła ją w wp_magic_quotes() bez sprawdzenia function_exists(), w wp-settings.php przed wczytaniem wtyczek i motywu. Strona pada w rdzeniu, więc żadna wtyczka nie jest nawet ładowana. Odpowiedź: HTTP/1.1 500, treść <html><head></head><body></body></html> (39 bajtów) przy display_errors = Off; WordPress 4.9 nie ma jeszcze ekranu „krytyczny błąd” (wprowadzony w 5.2). WordPress 4.9.35, najnowsze wydanie bezpieczeństwa tej gałęzi, daje na PHP 8.0 dokładnie to samo (to samo wywołanie w load.php linia 651). Wywołanie zniknęło z rdzenia dopiero w WordPressie 5.3. W 8.1+ dochodzą deprecated rdzenia, np. Return type of WP_Theme::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed.

Wariant display_errors = On, WP_DEBUG = false (częsty na tanich hostingach w 2018):

  • PHP 7.4: na górze każdej strony Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/html/wp-includes/pomo/plural-forms.php on line 210. Tekst przed <!DOCTYPE> przełącza przeglądarkę w tryb quirks: nagłówek OceanWP się rozjeżdża, tło sekcji hero znika, strona rośnie z 3397 do 4255 px. Logowanie wraca na wp-login.php, bo nie da się ustawić ciasteczek: PHP Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-includes/pomo/plural-forms.php:210) in /var/www/html/wp-includes/rest-api/class-wp-rest-server.php on line 1248. plural-forms.php jest wczytywany przy tłumaczeniu z formą liczby mnogiej, czyli na każdej stronie po polsku. PHP 7.3 w tym wariancie: to samo (ostrzeżenie, rozjechany nagłówek, brak logowania). PHP 7.2: czysto, bo ostrzeżenie pojawiło się dopiero w 7.3.
  • PHP 8.0: HTTP 200 (a nie 500, bo wyjście zaczęło się przed błędem) i treść błędu krytycznego ze ścieżkami serwera widoczna dla każdego gościa.

Ścieżka 2: WordPress aktualizowany, wtyczki i motyw z 2018

WordPress (db_version)jQuery / Migratena PHP 7.3/7.4na PHP 8.x (najwyższe zgodne)
4.9.35 (38590)1.12.4 / 1.4.1działa (7.2, 7.4)8.0: jak 4.9.8, HTTP 500 wszędzie
5.0.31 (43764), 5.1.28 (44719), 5.2.301.12.4 / 1.4.1działa (7.3)(bez wsparcia PHP 8)
5.3.27 (45805), 5.4.25 (47018)1.12.4 / 1.4.1działa (7.4)(bez wsparcia PHP 8)
5.5.24 (48748)1.12.4 / brak Migratedziała(bez wsparcia PHP 8)
5.6.23 (49752), 5.7.21, 5.8.193.5.1–3.6.0 / 3.3.2działa8.0: front OK, kokpit/wtyczki/strony „krytyczny błąd”
5.9.20 (51917), 6.0.18 (53496)3.6.0 / 3.3.2działa8.1: jak wyżej
6.2.15, 6.4.14 (56657), 6.6.11 (57155)3.6.4–3.7.1 / 3.4.xdziała8.2/8.3: jak wyżej
6.8.12 (60421), 6.9.11 (60717), 7.0.8 (61833), 7.1.43.7.1 / 3.4.1działa8.4/8.5: jak wyżej
7.1.43.7.1 / 3.4.1działa (7.4)8.0, 8.1, 8.2, 8.3, 8.4, 8.5: jak wyżej

We wszystkich przebiegach ścieżki 2 front zwracał 200 na 7/7 adresach, karuzela, liczniki, zakładki, akordeon i widżety EAEL działały, formularz wysyłał e-mail, edytor Elementora 2.3.4 wczytywał się w 1,4–1,8 s i zapisywał zmiany, także na PHP 8.5. Zmiany w WordPressie, o które pytamy najczęściej, nie zepsuły tej strony: 5.0 (edytor bloków), 5.5 (usunięcie jQuery Migrate), 5.6 (jQuery 3.5.1). Elementor 2.3.4 nie korzysta z API usuniętych przez jQuery 3.

Kokpit na PHP 8.x (WordPress 5.6 i każdy nowszy):

PHP Fatal error:  Uncaught TypeError: json_decode(): Argument #1 ($json) must be of type string, array given in /var/www/html/wp-content/plugins/elementor/includes/api.php:111
Stack trace:
#0 /var/www/html/wp-content/plugins/elementor/includes/api.php(111): json_decode(Array)
#1 /var/www/html/wp-content/plugins/elementor/includes/api.php(142): Elementor\Api::get_info_data()
#2 /var/www/html/wp-content/plugins/elementor/core/admin/admin.php(312): Elementor\Api::get_upgrade_notice()
#3 /var/www/html/wp-includes/class-wp-hook.php(287): Elementor\Core\Admin\Admin->admin_notices('')

Na ekranie: „W witrynie wystąpił krytyczny błąd. Instrukcje znajdziesz w skrzynce email administratora witryny.” pod nagłówkiem kokpitu. Mechanizm: Elementor 2.3.4 w hooku admin_notices pobiera https://my.elementor.com/api/v1/info/ i robi json_decode( $info_data['library']['categories'] ), bo w 2018 to pole było napisem z JSON-em. Dziś API zwraca tam tablicę (stan na 2026-11). Na PHP 7.x skutkiem jest ostrzeżenie PHP Warning: json_decode() expects parameter 1 to be string, array given in /var/www/html/wp-content/plugins/elementor/includes/api.php on line 111, widoczne w logu nawet na PHP 5.6 i 7.2. Od PHP 8.0 funkcje wbudowane rzucają TypeError przy złym typie argumentu. Wyjątek pada przed set_transient(), więc zapytanie i błąd powtarzają się przy każdym wejściu do panelu. Kontrola: ten sam WP 5.6.23 na PHP 8.0 z zablokowanym my.elementor.com dał kokpit bez błędu (tylko 19 Warning i 136 Deprecated). Front i edytor nie wywołują admin_notices, dlatego działały.

Pozostałe wpisy, które wtyczki z 2018 zostawiają na PHP 8.x (WP 7.1.4 + PHP 8.5, jeden przebieg: 4 Fatal z kokpitu, 16 Warning, 29 Notice, 167 Deprecated):

PHP Warning:  Trying to access array offset on null in /var/www/html/wp-content/plugins/elementor/includes/base/controls-stack.php on line 1416
PHP Deprecated:  Creation of dynamic property Ocean_Extra::$plugin_url is deprecated in /var/www/html/wp-content/plugins/ocean-extra/ocean-extra.php on line 87
PHP Deprecated:  Return type of WPCF7_FormTag::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
PHP Deprecated:  substr(): Passing null to parameter #1 ($string) of type string is deprecated in /var/www/html/wp-content/plugins/wordpress-seo/inc/class-wpseo-utils.php on line 812

Przy WordPressie 5.5+ CF7 5.0.5 dostaje register_rest_route ... brakuje wymaganego argumentu permission_callback, a przy 6.7+ Yoast 9.2 _load_textdomain_just_in_time ... Translation loading for the wordpress-seo domain was triggered too early (notice, bez skutków dla gości).

Edytor bloków od WordPressa 5.6: przy Elementorze 2.3.4 w edytorze bloków znika przycisk powrotu do Elementora, który w 5.0–5.5 był na pasku narzędzi. Edytor bloków pokazuje wtedy tekstową kopię strony jako blok „Klasyczny”. Zmiany w niej nie wpływają na stronę zbudowaną w Elementorze, co myli właścicieli. Wejście do Elementora nadal działa z paska administratora i listy stron. Błędu JS w konsoli nie było.

Wymagania PHP (stan na 2026-11, wp-includes/version.php i oficjalna tabela zgodności WordPressa): WP 4.9 obsługuje PHP do 7.2, 5.0–5.2 do 7.3, 5.3–5.5 do 7.4, 5.6–5.8 do 8.0, 5.9–6.0 do 8.1, 6.1–6.3 do 8.2, 6.4–6.6 do 8.3, 6.7–6.8 do 8.4, 6.9–7.1 do 8.5. Minimum: 5.2.4 do WP 5.1, 5.6.20 od 5.2, 7.0 od 6.4 (6.3 w tabeli), 7.2.24 od 6.6, 7.4 od 7.0. Kokpit WordPressa 4.9.8 proponuje dziś aktualizację do 7.1.4 także na PHP 7.2 (API version-check zwraca ofertę z php_version: 7.4). Wspólny zakres dla strony z 2018 (bez awarii do 7.4) i WordPressa 7.x (od 7.4) to tylko PHP 7.4.33, bez wsparcia od 28 listopada 2022.

Ścieżka 3: nowy Elementor przy starym motywie i dodatku

Baza: WP 7.1.4 + PHP 7.4 (ścieżka 2 działała), Elementor z 2.3.4 podmieniony jak przy aktualizacji z kokpitu (stary katalog usunięty, nowy rozpakowany, migracje danych Elementora).

ElementorFrontEdytorPrzyczyna
2.9.14200wczytuje się (1,8 s), okno „Note: Flexbox Changes”, zapis działabłąd JS z Ocean Extra w konsoli, bez skutków
3.0.16200, zmiany odstępów (podstrony o 20–40 px niższe)jak wyżejjak wyżej
3.5.6200nie wczytuje się: „Your site doesn't have a default kit”; po „Odtwórz kit” jak 3.0.16brak kitu po aktualizacji
3.6.8, 3.13.4, 3.35.9, 4.3.5500 na stronie głównej i Ofercienie wczytuje się (błąd krytyczny w podglądzie)EAEL 2.8.3 i usunięte Scheme_Typography
4.3.5 na PHP 8.3jak wyżejjak wyżejjak wyżej

Elementor 2.9, 3.0 i 3.5, edytor: przy otwarciu strony zbudowanej w 2.3 pojawia się okno „Note: Flexbox Changes. Elementor 2.5 introduces key changes to the layout using CSS Flexbox. Your existing pages might have been affected, please review your page before publishing.” i rzeczywiście podstrony są o 20–40 px niższe (zmiana odstępów kolumn). W konsoli edytora jest TypeError: Cannot read properties of undefined (reading 'search') z inline skryptu Ocean Extra 1.4.28 (widżet „About Me”), wstrzykiwanego do każdej strony panelu:

$(document).ajaxSuccess(function(e, xhr, settings) {
    var widget_id_base = 'ocean_about_me';
    if ( settings.data.search( 'action=save-widget' ) != -1 && ... ) {

Globalny handler ajaxSuccess zakłada, że każde żądanie AJAX ma settings.data jako napis; nowszy Elementor wysyła też żądania bez data. W naszym teście wyjątek nie zablokował zapisu: po zmianie nagłówka i kliknięciu „Aktualizuj” save_builder zwracał success: true w 2.9.14, 3.0.16 i 3.5.6 (z kitem). Uwaga dla testujących automatem: okno o Flexboxie zasłania przycisk zapisu, nasz pierwszy automatyczny przebieg zgłosił przez to fałszywy błąd zapisu.

Elementor 3.5.6, brak kitu: okno „Your site doesn't have a default kit. Seems like your kit was deleted, please create new one or try restore it from trash.”, a przy 4.3.5 dodatkowo {"code":"not-found","message":"Kit doesn't exist."} z /wp-json/elementor/v1/kit-elements-defaults (404). Od Elementora 3.x ustawienia globalne mieszkają w dokumencie „kit”. W 3.0.16 Kits\Manager::get_active_id() tworzył go sam, gdy go brakowało; w 3.5.6 tworzy go tylko hook aktywacji Maintenance::activation(). Aktualizacja z kokpitu nie aktywuje wtyczki ponownie, więc przy skoku 2.x → 3.5+ kit nie powstaje. Naprawa: Elementor > Narzędzia > „Odtwórz kit”. Po odtworzeniu kitu edytor 3.5.6 wczytał się w 1,8 s i zapisywał zmiany.

Elementor 3.6+ z EAEL 2.8.3:

PHP Fatal error:  Uncaught Error: Class 'Elementor\Scheme_Typography' not found in /var/www/html/wp-content/plugins/essential-addons-for-elementor-lite/elements/fancy-text/fancy-text.php:287
Stack trace:
#0 /var/www/html/wp-content/plugins/elementor/includes/base/controls-stack.php(2280): Elementor\Widget_Eael_Fancy_Text->_register_controls()
#1 /var/www/html/wp-content/plugins/elementor/includes/base/controls-stack.php(494): Elementor\Controls_Stack->init_controls()

To samo dla contact-form-7/contact-form-7.php:455. Na PHP 8 komunikat ma cudzysłowy: Class "Elementor\Scheme_Typography" not found. EAEL 2.8.3 rejestruje kontrolki typografii przez Scheme_Typography::get_type(). Elementor 3.5 usunął stare schematy z danych (_v_3_5_0_remove_old_elementor_scheme), 3.6 usunął klasy. Widżet rejestruje kontrolki dopiero przy renderowaniu, więc padają tylko strony z widżetami EAEL, które używają typografii (strona główna: fancy-text, Oferta: contact-form-7); „O nas” z innymi widżetami EAEL działa. Ekran gościa: „W witrynie wystąpił krytyczny błąd.” z kodem 500.

Pełna aktualizacja wszystkiego (droga ratunkowa)

Z bazy WP 7.1.4 podmienione naraz: Elementor 4.3.5, EAEL 6.8.8, CF7 6.2.4.1, Yoast SEO 28.8, OceanWP 4.2.8, Ocean Extra 2.6.3 (stan na 2026-11), migracje danych Elementora przez wp elementor update db, potem test na PHP 8.3, 8.4 i 8.5.

Wynik
Front7/7 adresów HTTP 200, 0 błędów JS; liczniki 15/450/98/6, karuzele zainicjowane (Swiper zamiast slick), zakładki, akordeon, EAEL 15/15 widżetów, galeria 8/8
FormularzREST mail_sent, e-mail w Mailpit
Log PHP (cały przebieg)8.3 i 8.4: 2 Notice (_load_textdomain_just_in_time dla wordpress-seo; Control type "nested-elements-repeater" not found); 8.5: dodatkowo 24 Deprecated z Yoasta (Using null as an array offset is deprecated, use an empty string instead in .../wordpress-seo/src/memoizers/presentation-memoizer.php on line 49)
Edytor przed odtworzeniem kitunie wczytuje się: „Your site doesn't have a default kit”, REST 404 Kit doesn't exist.
Edytor po odtworzeniu kituwczytuje się; trzy nakładki (Flexbox, reklama, podpowiedź Yoasta); po ich zamknięciu panel „Edit Nagłówek”, save_builder success
Wyglądzmiany na każdej podstronie Elementora: inny układ boksu EAEL „Call to Action” (przycisk obok tekstu), niższa karuzela, inna typografia tekstu EAEL i kolory stopki OceanWP; wysokość strony głównej 3318 zamiast 3397 px; ikona fa fa-clock-o (nazwa z Font Awesome 4) bez glifu na stronie Kontakt

CF7 6.2.4.1 deklaruje Requires PHP: 8.3, a wtyczki z 2018 nie działają w panelu na PHP 8: pełnej aktualizacji nie da się zrobić „po kawałku” na jednej wersji PHP, tylko naraz albo w kolejności: WordPress na PHP 7.4, kopia, potem wszystkie wtyczki i motyw razem ze zmianą PHP. Przy okazji: CF7 6.x ma ostrzejszą walidację numeru telefonu (wpcf7_is_tel()); numer zaczynający się od „00” traktuje jako międzynarodowy i np. 000000000 odrzuca komunikatem „Wprowadzony numer telefonu jest nieprawidłowy.”.

Co nie było oczywiste

  1. Strona pada w rdzeniu, nie we wtyczkach. Na PHP 8 zamrożona strona nie dochodzi do Elementora: wp_magic_quotes() w wp-settings.php woła usuniętą get_magic_quotes_gpc(). Wyłączanie wtyczek przez zmianę nazwy katalogu nic nie da; pomaga tylko aktualizacja rdzenia do 5.3 lub nowszego (wywołanie zniknęło z load.php w 5.3; 5.2.30 nadal je ma).
  2. Wydania bezpieczeństwa gałęzi 4.9 tego nie poprawiają. 4.9.35 na PHP 8.0 daje ten sam fatal. Kto liczy na automatyczne poprawki, zostaje z tą samą białą stroną.
  3. Błąd zależny od cudzego serwera. Kokpit na PHP 8 pada przez odpowiedź my.elementor.com, której format zmienił się po latach. Ostrzeżenie było w logu nawet na PHP 5.6 i 7.2 przy niezmienionym kodzie strony; PHP 8 zamienił je w TypeError. Bez dostępu do API (lub z zablokowanym hostem) ten sam kokpit działał. Front i edytor nie wołają tego kodu, więc „strona działa”, a właściciel nie może wejść do panelu.
  4. display_errors = On przesuwa granicę do PHP 7.3 i psuje logowanie. Ostrzeżenie kompilacji z plural-forms.php (ładowane przy polskim tłumaczeniu) wychodzi przed nagłówkami: przeglądarka w trybie quirks, a setcookie() nie działa, więc logowanie wraca na wp-login.php. Na PHP 8 ten sam wariant zwraca HTTP 200 z treścią fatala i ścieżkami serwera zamiast 500.
  5. jQuery 3 i usunięcie jQuery Migrate nie zepsuły Elementora 2.3.4. WP 5.5 (bez Migrate) i 5.6 (jQuery 3.5.1) przeszły bez błędu JS na froncie i w edytorze. Jedyna widoczna zmiana: od WP 5.6 w edytorze bloków znika przycisk Elementora 2.3.4. Błąd JS z globalnego ajaxSuccess Ocean Extra pojawia się dopiero przy nowszym Elementorze i w teście nie blokował zapisu.
  6. Aktualizacja Elementora z kokpitu nie tworzy kitu. Przy skoku z 2.x do 3.5+ edytor zgłasza brak kitu, bo kit tworzy tylko hook aktywacji; 3.0 jeszcze naprawiał to sam.
  7. Usunięta klasa zabija tylko część stron. EAEL 2.8.3 przy Elementorze 3.6+ wywala stronę główną i Ofertę, a „O nas” z innymi widżetami EAEL działa. Test jednej podstrony po aktualizacji niczego nie dowodzi.
  8. Kopiowanie „tylko zmienionych plików” miesza wersje. Pakiety 5.2.30 i 5.3.27 (zbudowane 29.10.2026 23:02) mają sześć plików o tej samej dacie i rozmiarze, ale innej treści, m.in. wp-includes/version.php („5.2.30” i „5.3.27” mają po 6 znaków). rsync w trybie szybkim zostawił stary version.php i wp core update-db uznał bazę za aktualną. To samo zrobi klient FTP z opcją „pomiń pliki o tym samym rozmiarze”. W labie kopiujemy z sumami kontrolnymi.

Rekomendacja dla strony z 2018 roku

  1. Najpierw kopia i lab, nie produkcja. Każdy krok niżej sprawdzony na kopii tym samym zestawem kontroli.
  2. Bezpieczne na PHP 7.4: aktualizacja samego WordPressa, krok po kroku, do 7.1.x. W teście bez awarii frontu, edytora i formularza, tylko wpisy w logu. To odracza problem, nie rozwiązuje go: PHP 7.4 nie ma wsparcia.
  3. Przed PHP 8: zaktualizować WordPress (usuwa fatal rdzenia), potem wymienić naraz Elementor, dodatek EAEL, motyw i jego wtyczkę na wersje zgodne z PHP 8, odtworzyć kit (Elementor > Narzędzia), zamienić ikony Font Awesome 4 bez odpowiednika, przejrzeć każdą podstronę (układ boksów EAEL, karuzela, stopka). W teście po tych krokach strona działała na PHP 8.3, 8.4 i 8.5.
  4. Nie aktualizować samego Elementora przy dodatku i motywie z 2018. Jeśli dodatek nie ma wersji zgodnej z nowym Elementorem, jego widżety trzeba zastąpić przed aktualizacją.
  5. Przebudowa zamiast aktualizacji, gdy motyw lub dodatek nie są już rozwijane, gdy strona używa wielu widżetów dodatku albo gdy po pełnej aktualizacji większość podstron wymaga ręcznych poprawek.
  6. Na każdym hostingu: display_errors = Off na produkcji i log błędów włączony.

Rezultaty

EtykietaWartość
Przebiegi testu70 konfiguracji, każda: 7 adresów, panel, edytor, formularz, log PHP
Zamrożona strona działa naPHP 5.6–7.4 (6 z 12 sprawdzonych wersji)
Pierwsze PHP z awarią8.0: HTTP 500 na 7 z 7 adresów, logowanie niedostępne
Pierwsze PHP z awarią przy display_errors = On7.3: ostrzeżenie na stronie, rozjechany nagłówek, logowanie niemożliwe (7.2 czysto)
Aktualizacja samego WordPressa na PHP 7.419 wydań od 4.9 do 7.1.4 bez awarii frontu, edytora i formularza
Stary Elementor na PHP 8.0–8.5 z nowym WordPressemfront, edytor i formularz działają; kokpit, wtyczki i lista stron: błąd krytyczny w każdym z 17 przebiegów (WP 5.6–7.1)
Pierwsza wersja Elementora wyłączająca strony z dodatkiem z 20183.6.8 (2 z 7 adresów HTTP 500)
Pierwsza wersja Elementora, po której edytor się nie otwiera3.5.6 (brak kitu; naprawa: Odtwórz kit)
Pełna aktualizacja wszystkiego na PHP 8.3–8.57/7 adresów 200, formularz OK, 2 wpisy w logu (8.3), edytor po odtworzeniu kitu; zmiany wyglądu na każdej podstronie Elementora
Wspólne PHP dla wtyczek z 2018 i WordPressa 7.xtylko 7.4, bez wsparcia od 2022-11

Wnioski

  • Strona z 2018 roku na Elementorze ma twardą granicę: PHP 8.0. Wyznacza ją rdzeń WordPressa 4.9, nie Elementor.
  • Aktualizacja samego WordPressa jest bezpieczniejsza, niż się wydaje, ale działa tylko na PHP 7.4.
  • Najgroźniejsza jest aktualizacja jednej wtyczki w zestawie z 2018 roku: nowy Elementor ze starym dodatkiem wyłącza strony, które z tego dodatku korzystają.
  • Część błędów zależy od rzeczy spoza strony: odpowiedzi API producenta i ustawień hostingu. Dlatego decyzję „aktualizować czy przebudować” warto oprzeć na teście kopii, a nie na liście wersji.

Gdy stara strona ma przejść na nowe PHP

  • Bezpłatny przegląd strony

    Gdy masz stronę i nie wiesz, w jakim jest stanie: czy jest bezpieczna, aktualna i czy pomaga zdobywać klientów.

    bezpłatnie

    • certyfikat SSL i ostrzeżenia przeglądarki
    • wersje WordPressa, PHP, wtyczek i motywu
    • kopie zapasowe: czy są i gdzie
    • wygląd i szybkość na telefonie
    • podstawy widoczności w Google

    Co dostajesz

    Krótki raport e-mailem: co działa, co poprawić najpierw i od czego zacząć.

  • Naprawa strony WordPress (także po włamaniu)

    Gdy strona pokazuje błąd, nie da się zalogować do panelu albo strona została zainfekowana i trzeba ją wyczyścić.

    Wycena indywidualna

    • diagnoza przyczyny: wtyczki, motyw, wersja PHP, baza danych, logi serwera
    • kopia plików i bazy danych przed zmianami
    • naprawa błędu albo usunięcie złośliwego kodu i zamknięcie luki
    • kontrola panelu, formularza i najważniejszych podstron po naprawie

    Co dostajesz

    Przed naprawą: cenę do akceptacji. Po naprawie: krótki opis przyczyny i tego, co zrobić, żeby problem nie wrócił.

Jeśli Twoja strona nie działa, zadzwoń, chętnie to naprawimy!

Telefon (polski) +48 501 250 220

Dostępni: poniedziałek–piątek, 9:00–17:00