Dlaczego WordPress 5.5.3 z PHP 8 zwraca błąd 404 na każdej stronie witryny?

  • 02.10.2026
  • 13
  • Czas czytania: 2 min
  • Kategoria:Konserwacja

The article discusses compatibility issues between WordPress 5.5.3 and PHP 8, which lead to 404 errors on every page of the site. The main cause is outdated plugins and themes that do not support the new PHP version.

Dlaczego WordPress 5.5.3 z PHP 8 zwraca błąd 404 na każdej stronie witryny?

Najnowsza wersja WordPressa 5.5.3 zwraca błąd 404 po przełączeniu na nowo wydaną wersję PHP 8. Dlaczego?

Oficjalnie WordPress będzie kompatybilny z PHP 8 dopiero od wersji 5.6, której wydanie zaplanowano na 8 grudnia 2020 roku. Wersja RC WordPressa 5.6 działa poprawnie z PHP 8 — problem został już naprawiony. Warto jednak zrozumieć, skąd właściwie bierze się ten problem.

Najpierw spróbujmy odpowiedzieć na pytanie: jaki jest wynik wyrażenia

'' < 0 //(pusty ciąg znaków jest mniejszy od zera)?

Pierwsza odpowiedź, która przychodzi na myśl, to false. Pusty ciąg znaków jest konwertowany do zera, więc otrzymujemy porównanie 0 < 0, którego wynik to false.

Tak zawsze działało to w PHP i przed PHP 8 wynik tego wyrażenia rzeczywiście był false. Jednak nie w PHP 8. Tutaj wynik wyrażenia to true, co zostało oficjalnie opisane. Porównanie z ciągiem znaków zawierającym liczbę wykorzystuje porównanie liczbowe. Pusty ciąg znaków nie jest jednak ciągiem numerycznym, dlatego PHP 8 wykorzystuje porównanie ciągów znaków: '' < '0', a wynik to true.

Co to ma wspólnego z WordPressem?

Rdzeń WordPressa zawiera metodę, która jest wywoływana przy każdym żądaniu: \WP_Query::parse_query. Znajdują się w niej następujące linie:

if ( !is_scalar( $qv['p'] ) || $qv['p'] < 0 ) {
    $qv['p']     = 0;
    $qv['error'] = '404';
    ...

W większości przypadków $qv['p'] zawiera pusty ciąg znaków, co powoduje spełnienie warunku if i ustawienie błędu 404.

W WordPressie 5.6 porównanie ciągów znaków wygląda następująco:

if ( !is_scalar( $qv['p'] ) || (int)$qv['p'] < 0 ) { ...

To rozwiązuje problem w PHP 8 i działa poprawnie we wszystkich wersjach PHP.

Nie należy korzystać z niejawnego rzutowania typów, szczególnie podczas tworzenia kodu, który ma działać z PHP 8.

Oryginalny artykuł można przeczytać tutaj

Powiązane wpisy

Wskazówki i spostrzeżenia z mojej drogi zawodowej

Jak korzystać z autoloadingu Composera w WordPressie

Jak korzystać z autoloadingu Composera w WordPressie

  • 02.10.2026
  • 14
Przeniesienie strony ze środowiska lokalnego na serwer za pomocą dostępu SSH

Przeniesienie strony ze środowiska lokalnego na serwer za pomocą dostępu SSH

  • 02.10.2026
  • 13
Standardy kodowania WordPressa dla PHP

Standardy kodowania WordPressa dla PHP

  • 02.10.2026
  • 12
Wszystkie wpisy

Gotowy, aby wynieść swój projekt
na wyższy poziom?

Wprowadźmy Twoją wizję w życie dzięki profesjonalnemu tworzeniu stron i dedykowanym rozwiązaniom.
Skontaktuj się z nami już teraz i rozpocznijmy pracę nad przekształceniem Twoich pomysłów w rzeczywistość!