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

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

Artykuł omawia problemy z kompatybilnością WordPressa 5.5.3 z PHP 8, które powodują błędy 404 na każdej podstronie witryny. Główną przyczyną są przestarzałe wtyczki i motywy, które nie obsługują nowej wersji PHP.

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

Krytyczne podatności PHP2Shell (CVE-2026-109618 i CVE-2026-109619): Analiza i instrukcja naprawy dla VPS

Krytyczne podatności PHP2Shell (CVE-2026-109618 i CVE-2026-109619): Analiza i instrukcja naprawy dla VPS

  • 23.10.2026
  • 16
Jak korzystać z autoloadingu Composera w WordPressie

Jak korzystać z autoloadingu Composera w WordPressie

  • 02.10.2026
  • 122
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
  • 119
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ść!