WooCommerce HPOS – PHP Fatal Error może uniemożliwić zapisywanie zamówień po usunięciu wtyczki
W WooCommerce wykryto poważny błąd związany z synchronizacją zamówień pomiędzy mechanizmem High-Performance Order Storage (HPOS) a tradycyjnymi tabelami WordPressa. W określonych warunkach próba zapisania lub zaktualizowania zamówienia może zakończyć się PHP Fatal Error, jeżeli w bazie danych pozostały metadane zawierające obiekt klasy PHP, która nie jest już dostępna.
Problem został zgłoszony 7 listopada 2026 roku w oficjalnym repozytorium WooCommerce na GitHubie pod numerem #70760. Dotyczy sklepów, w których HPOS stanowi główne źródło danych zamówień, a jednocześnie włączona jest synchronizacja zgodności ze starszym systemem przechowywania danych w tabelach WordPressa.
Jedną z sytuacji mogących wywołać błąd jest usunięcie lub dezaktywacja wtyczki, która wcześniej zapisywała niestandardowe obiekty PHP w metadanych zamówień. Jeżeli zapisany obiekt nie może zostać poprawnie odtworzony, WooCommerce może napotkać wyjątek podczas usuwania nieaktualnych danych.
Skutkiem jest przerwanie wykonywania operacji zapisu zamówienia. W zależności od tego, w jakim momencie występuje błąd, może to zakłócić pracę administratora, integracji zewnętrznych lub innych procesów modyfikujących zamówienia.
Nie potwierdzono jednak, że problem powoduje powszechną awarię wszystkich sklepów wykorzystujących HPOS. Wystąpienie błędu wymaga konkretnej kombinacji ustawień i danych pozostawionych w bazie.
Dokładny komunikat PHP Fatal Error w WooCommerce
W zgłoszeniu #70760 przedstawiono następujący komunikat:
Error: The script tried to modify a property on an incomplete object.
Błąd dotyczy obiektu PHP reprezentowanego przez klasę:
__PHP_Incomplete_Class
Wskazano również metodę WooCommerce:
WC_Order_Data_Store_CPT::update_order_meta_from_object()
oraz plik:
wp-content/plugins/woocommerce/includes/data-stores/abstract-wc-order-data-store-cpt.php
W analizowanym kodzie problem pojawia się w pętli usuwającej metadane, których nie ma już w aktualnym obiekcie zamówienia.
Charakterystyczny fragment:
delete_post_meta(
$order->get_id(),
$meta_key,
maybe_unserialize( $meta_value )
);
Samo wywołanie delete_post_meta() nie jest błędem. Problem występuje wtedy, gdy przekazana wartość zostaje odtworzona jako niekompletny obiekt PHP.
W takiej sytuacji dalsze przetwarzanie przez mechanizmy WordPressa może doprowadzić do próby modyfikowania właściwości obiektu, którego oryginalna klasa nie jest już dostępna.
Czym jest HPOS i dlaczego WooCommerce synchronizuje dane zamówień?
High-Performance Order Storage to mechanizm przechowywania zamówień w dedykowanych tabelach WooCommerce.
W tradycyjnym modelu WordPressa dane zamówień były przechowywane przede wszystkim w tabelach wp_posts i wp_postmeta. HPOS wykorzystuje odrębne tabele zoptymalizowane do operacji na zamówieniach.
Do najważniejszych należą:
wp_wc_orders– podstawowe informacje o zamówieniach;wp_wc_order_addresses– adresy rozliczeniowe i dostawy;wp_wc_order_operational_data– dodatkowe dane operacyjne;wp_wc_orders_meta– metadane powiązane z zamówieniami.
Prefiks wp_ jest przykładowy. W rzeczywistej instalacji WordPressa nazwy tabel mogą rozpoczynać się od innego prefiksu.
HPOS ogranicza konieczność wykorzystywania ogólnych tabel WordPressa do przechowywania dużej liczby zamówień. Może to poprawiać wydajność zapytań, skalowalność i organizację danych.
Po co WooCommerce utrzymuje zgodność ze starszymi tabelami?
Nie wszystkie rozszerzenia WooCommerce od początku wykorzystywały dedykowane tabele HPOS.
Wiele starszych wtyczek i niestandardowych integracji zostało zaprojektowanych do odczytywania danych zamówień bezpośrednio z tabel wp_posts i wp_postmeta.
Aby ułatwić przechodzenie na HPOS, WooCommerce udostępnia tryb zgodności, który umożliwia synchronizację danych pomiędzy obydwoma systemami przechowywania zamówień.
Jeżeli HPOS jest głównym źródłem danych, podczas zapisywania zamówienia WooCommerce może aktualizować również odpowiadający mu rekord w tradycyjnych tabelach WordPressa.
Właśnie podczas tej operacji może wystąpić błąd opisany w zgłoszeniu #70760.
Szczegółowe informacje o działaniu tego mechanizmu znajdują się w oficjalnej dokumentacji WooCommerce High-Performance Order Storage.
Jak dochodzi do awarii po usunięciu lub dezaktywacji wtyczki?
Rozszerzenia WooCommerce mogą zapisywać własne metadane zamówień. Niektóre wykorzystują do tego obiekty PHP, które przed zapisaniem są serializowane do postaci tekstowej.
Serializacja umożliwia przechowywanie obiektu w bazie danych, a następnie jego odtworzenie przez kod PHP.
Problem pojawia się, gdy kod definiujący klasę takiego obiektu nie jest już dostępny.
Może to nastąpić na przykład po dezaktywacji wtyczki, jej usunięciu albo zmianie kodu rozszerzenia, w wyniku której wcześniejsza klasa przestaje być ładowana.
Przykładowy przebieg awarii
- W sklepie działa dodatkowa wtyczka, która zapisuje niestandardowy obiekt PHP w metadanych zamówienia.
- Obiekt zostaje zapisany w bazie danych w postaci serializowanej.
- Administrator dezaktywuje lub usuwa wtyczkę, ale powiązane z nią metadane pozostają w bazie.
- W kolejnych operacjach kod definiujący oryginalną klasę PHP nie jest już dostępny.
- WooCommerce wykorzystuje HPOS jako główne źródło danych zamówień oraz synchronizuje dane z tradycyjnymi tabelami WordPressa.
- Podczas aktualizacji zamówienia system wykrywa metadane obecne w starszym rekordzie, których nie ma już w aktualnym obiekcie zamówienia.
- WooCommerce próbuje usunąć nieaktualny wpis z tabeli
wp_postmeta. - Funkcja
maybe_unserialize()odtwarza zapisany obiekt jako__PHP_Incomplete_Class. - Mechanizm usuwania metadanych próbuje przetworzyć właściwości niekompletnego obiektu.
- PHP zgłasza błąd krytyczny i przerywa wykonywanie bieżącej operacji.
Nie oznacza to, że usunięcie dowolnej wtyczki automatycznie prowadzi do awarii WooCommerce.
Warunkiem jest między innymi istnienie odpowiednio zapisanych metadanych zawierających obiekt nieistniejącej klasy oraz uruchomienie określonej ścieżki synchronizacji zamówienia.
Dlaczego PHP tworzy obiekt __PHP_Incomplete_Class?
PHP umożliwia serializowanie obiektów, czyli przekształcanie ich do formatu, który można zapisać i później odtworzyć.
Podczas deserializacji interpreter próbuje odtworzyć oryginalną klasę obiektu.
Jeżeli definicja klasy nie jest dostępna i nie może zostać załadowana, PHP może zwrócić obiekt typu:
__PHP_Incomplete_Class
To specjalna reprezentacja obiektu, którego pełnej struktury nie udało się odtworzyć.
Przykładowo w bazie danych może pozostać obiekt zapisany przez wtyczkę, która została już odinstalowana.
Samo wystąpienie __PHP_Incomplete_Class nie musi powodować natychmiastowej awarii. Problem powstaje dopiero wtedy, gdy kod wykonuje na takim obiekcie operacje wymagające dostępu do właściwości w sposób, którego PHP nie obsługuje.
Co dokładnie powoduje Fatal Error?
W zgłoszeniu wskazano następującą sekwencję funkcji:
maybe_unserialize()
|
v
__PHP_Incomplete_Class
|
v
delete_post_meta()
|
v
delete_metadata()
|
v
wp_unslash()
|
v
map_deep()
|
v
PHP Fatal Error
Funkcja map_deep() próbuje przetworzyć właściwości przekazanego obiektu.
W przypadku __PHP_Incomplete_Class prowadzi to do błędu:
The script tried to modify a property on an incomplete object.
W rezultacie WooCommerce nie może prawidłowo zakończyć operacji synchronizowania i zapisywania danego zamówienia.
Dlaczego błąd dotyczy synchronizacji, a nie wszystkich zamówień?
W zgłoszeniu przedstawiono trzy szczególnie istotne warunki wystąpienia problemu.
| Warunek | Znaczenie |
|---|---|
| HPOS jako główne źródło danych | Zamówienia są obsługiwane przez dedykowane tabele WooCommerce. |
| Włączony tryb zgodności | WooCommerce synchronizuje dane z tradycyjnymi tabelami WordPressa. |
| Nieaktualne metadane z obiektem nieistniejącej klasy | Podczas usuwania danych może zostać utworzony __PHP_Incomplete_Class. |
Dodatkowo musi zostać uruchomiona operacja, podczas której WooCommerce usuwa metadane znajdujące się w starszym rekordzie zamówienia, ale nieobecne w jego aktualnym obiekcie.
Dlatego błąd może dotyczyć tylko wybranych zamówień.
Jedno zamówienie może zapisywać się prawidłowo, podczas gdy inne, posiadające odpowiedni nieaktualny wpis w metadanych, będzie powodowało PHP Fatal Error.
Nie należy również zakładać, że przyczyną jest sam mechanizm HPOS. Problem dotyczy konkretnej operacji synchronizacji i obsługi nietypowych danych.
Jakie konsekwencje może mieć błąd dla działającego sklepu?
Nieudane aktualizowanie zamówień
Najważniejszym potwierdzonym skutkiem jest przerwanie operacji zapisu zamówienia.
Administrator może próbować zmienić dane zamówienia, jego adres rozliczeniowy lub inne informacje, ale operacja zakończy się błędem krytycznym.
W takim przypadku należy sprawdzić, które zmiany rzeczywiście zostały zapisane, a które nie zostały poprawnie zsynchronizowane.
Nie można automatycznie zakładać, że wszystkie wcześniejsze operacje wykonane w ramach tego samego żądania zostały cofnięte.
Niespójność danych pomiędzy HPOS a starszym systemem zamówień
Jeżeli zapisywanie zamówienia zostanie przerwane podczas synchronizacji, aktualne dane HPOS i odpowiadające im rekordy w tradycyjnych tabelach WordPressa mogą wymagać porównania.
Nie oznacza to automatycznie uszkodzenia bazy danych.
Problem polega przede wszystkim na tym, że proces nie może prawidłowo zakończyć określonej operacji na metadanych.
Zakłócenia działania integracji zewnętrznych
Sklepy WooCommerce często korzystają z systemów magazynowych, ERP, oprogramowania księgowego i dodatkowych rozszerzeń obsługujących zamówienia.
Jeżeli integracja modyfikuje zamówienie, którego synchronizacja kończy się błędem, może nie otrzymać oczekiwanego potwierdzenia zakończenia operacji.
W zależności od sposobu działania integracji może to prowadzić do ponawiania żądań, opóźnień w przetwarzaniu danych lub konieczności ręcznego wyjaśnienia stanu zamówienia.
Znaczenie spójnego przepływu informacji między sklepem, magazynem i systemami obsługi sprzedaży opisuje artykuł realizacja zamówień w sklepie internetowym i zarządzanie procesami operacyjnymi.
Możliwy wpływ na realizację sprzedaży
Jeżeli błąd występuje podczas operacji niezbędnej do realizacji zamówienia, może utrudniać jego dalszą obsługę.
W zgłoszeniu nie potwierdzono jednak, że problem powszechnie blokuje checkout, uniemożliwia każdą płatność albo powoduje utratę zamówień klientów.
Ryzyko operacyjne zależy od tego, w jakiej czynności zostaje wywołany zapis problematycznego zamówienia.
Jak sprawdzić, czy WooCommerce wykorzystuje HPOS i synchronizację zgodności?
Administrator sklepu może sprawdzić konfigurację bez bezpośredniego dostępu do bazy danych.
Krok 1. Otwórz ustawienia zaawansowane WooCommerce
W panelu administracyjnym WordPressa przejdź do:
WooCommerce → Ustawienia → Zaawansowane → Funkcje.
Odszukaj sekcję dotyczącą przechowywania danych zamówień.
Sprawdź, czy głównym systemem jest:
High-performance order storage
W polskiej wersji panelu nazwy opcji mogą być przetłumaczone.
Krok 2. Sprawdź tryb zgodności
W tej samej sekcji znajdź ustawienie:
Enable compatibility mode
Jest to mechanizm synchronizujący dane zamówień z tradycyjnymi tabelami WordPressa.
Jeżeli HPOS jest głównym źródłem danych i jednocześnie tryb zgodności pozostaje aktywny, sklep wykorzystuje konfigurację odpowiadającą jednemu z warunków opisanych w zgłoszeniu.
Nie oznacza to jednak, że występują w nim niekompletne obiekty PHP.
Krok 3. Sprawdź wersję WooCommerce
Otwórz WooCommerce → Status i odczytaj zainstalowaną wersję platformy.
Autor zgłoszenia nie podał pełnej listy wydań dotkniętych błędem. Nie należy więc ograniczać diagnostyki wyłącznie do jednego numeru wersji.
Zespół przygotowujący poprawkę wskazał wcześniejsze zmiany kodu, z których wywodzi się problem, ale nie opublikował kompletnego zestawienia stabilnych wersji wymagających naprawy.
Jak znaleźć błąd __PHP_Incomplete_Class w logach WooCommerce?
Podstawowym źródłem informacji są logi PHP oraz komunikaty krytyczne WordPressa.
Sprawdzenie logów WooCommerce
W panelu administracyjnym przejdź do:
WooCommerce → Status → Logi.
Sprawdź dostępne wpisy związane z błędami krytycznymi.
W logach wyszukaj fragmenty:
__PHP_Incomplete_Class
incomplete object
update_order_meta_from_object
abstract-wc-order-data-store-cpt.php
map_deep()
Jeżeli występują razem z błędem dotyczącym modyfikowania właściwości niekompletnego obiektu, należy sprawdzić metadane zamówienia wskazanego w logu.
Sprawdzenie logów PHP na serwerze
Jeżeli WooCommerce nie zarejestrowało odpowiedniego błędu, należy przeanalizować dziennik PHP obsługującego stronę.
Na serwerach wykorzystujących PHP-FPM logi mogą być zapisywane w plikach przypisanych do odpowiedniej puli PHP albo w dziennikach systemowych.
Dokładna lokalizacja zależy od konfiguracji hostingu i serwera WWW.
Przykładowe polecenie wyszukiwania w istniejącym pliku logu:
grep -i "incomplete object" /sciezka/do/php-error.log
Podana ścieżka musi zostać zastąpiona rzeczywistą lokalizacją logu.
W przypadku dużych dzienników warto dodatkowo porównać czas wystąpienia błędu z momentem nieudanej próby zapisu zamówienia.
Dlaczego dokładny komunikat ma znaczenie?
WooCommerce może generować różne błędy krytyczne związane z zamówieniami, koszykiem i dodatkowymi integracjami.
Nie każdy błąd PHP Fatal Error oznacza problem z HPOS.
Przykładem innego mechanizmu jest opisany wcześniej WooCommerce Fatal Error: Call to a Member Function get_cart() on Null, który wynika z nieprawidłowego dostępu do obiektu koszyka.
W przypadku zgłoszenia #70760 kluczowe są natomiast niekompletne obiekty PHP oraz usuwanie nieaktualnych metadanych podczas synchronizacji zamówienia.
Jak sprawdzić nieaktualne metadane pozostawione przez usuniętą wtyczkę?
Jeżeli logi wskazują na konkretne zamówienie, można przeanalizować jego metadane w bazie danych.
Przed wykonaniem jakichkolwiek zmian należy przygotować aktualną kopię zapasową oraz ustalić, które tabele stanowią główne źródło danych zamówień.
Odczyt metadanych w tradycyjnej tabeli WordPressa
Przykładowe zapytanie służące do odczytania metadanych jednego zamówienia:
SELECT
meta_id,
meta_key,
LEFT(meta_value, 100) AS meta_preview
FROM wp_postmeta
WHERE post_id = 12345
ORDER BY meta_id;
Wartość 12345 należy zastąpić identyfikatorem analizowanego zamówienia.
Zapytanie jest tylko do odczytu i nie zmienia danych.
W przypadku obiektów zapisanych w formacie serializowanym warto zwrócić uwagę na odpowiednie wpisy metadanych, szczególnie jeśli zostały utworzone przez usunięte lub zdezaktywowane rozszerzenie.
Nie należy jednak usuwać wpisu tylko dlatego, że jego wartość zawiera serializowany obiekt.
Wiele prawidłowo działających wtyczek wykorzystuje taki sposób przechowywania danych.
Sprawdzenie wyłącznie potencjalnych obiektów serializowanych
Wstępne zawężenie wyników można wykonać za pomocą zapytania:
SELECT
meta_id,
meta_key,
LEFT(meta_value, 100) AS meta_preview
FROM wp_postmeta
WHERE post_id = 12345
AND meta_value LIKE 'O:%';
Zapytanie wskazuje wartości rozpoczynające się od charakterystycznego prefiksu serializowanego obiektu PHP.
Nie jest to jednak pełny test wykrywania __PHP_Incomplete_Class. Nie każdy serializowany obiekt jest niekompletny, a część złożonych struktur może zawierać zagnieżdżone obiekty.
Do ostatecznej identyfikacji potrzebna jest znajomość klasy, której obiekt zapisano, oraz dostępności jej definicji podczas przetwarzania zamówienia.
Czy można naprawić problem przez ponowne włączenie usuniętej wtyczki?
W niektórych przypadkach tymczasowe przywrócenie rozszerzenia definiującego brakującą klasę PHP może zmienić sposób odtwarzania zapisanych obiektów.
Nie jest to jednak oficjalne rozwiązanie błędu WooCommerce #70760.
Takie działanie może być uzasadnione wyłącznie wtedy, gdy administrator zna pochodzenie obiektu i ma pewność, że przywracana wtyczka jest zgodna z aktualnym środowiskiem.
Nie należy ponownie instalować przestarzałych lub podatnych na ataki wtyczek tylko po to, aby odtworzyć brakującą klasę.
Jeżeli rozszerzenie zostało usunięte ze względów bezpieczeństwa, ponowne jego uruchomienie może wprowadzić większe ryzyko niż sam błąd synchronizacji.
Najbezpieczniejsze jest przeprowadzenie diagnostyki na kopii testowej sklepu oraz ustalenie, czy nieaktualne metadane można usunąć zgodnie z wymaganiami integracji i mechanizmami WooCommerce.
Czy wyłączenie synchronizacji HPOS rozwiąże błąd?
Wyłączenie trybu zgodności zmienia sposób synchronizowania danych pomiędzy HPOS a starszymi tabelami WordPressa.
Ponieważ zgłoszony błąd występuje na konkretnej ścieżce synchronizacji, zmiana konfiguracji może wpłynąć na możliwość jego odtworzenia.
Nie oznacza to jednak, że wyłączenie synchronizacji jest uniwersalną i bezpieczną metodą naprawy.
Starsze integracje mogą nadal wykorzystywać tradycyjne tabele do odczytu danych zamówień. Po wyłączeniu synchronizacji mogą przestać otrzymywać aktualne informacje.
Przed jakąkolwiek zmianą należy ustalić:
- czy wszystkie aktywne rozszerzenia są zgodne z HPOS;
- czy zewnętrzne integracje korzystają z tradycyjnych tabel zamówień;
- czy dane w obu systemach są obecnie zsynchronizowane;
- czy sklep wykorzystuje niestandardowe mechanizmy eksportu lub raportowania;
- czy możliwe jest bezpieczne przetestowanie nowej konfiguracji poza środowiskiem produkcyjnym.
Nie należy zmieniać głównego źródła danych zamówień ani wyłączać synchronizacji w działającym sklepie bez uprzedniego sprawdzenia zgodności danych.
Jaką poprawkę przygotowano dla WooCommerce?
7 listopada 2026 roku utworzono pull request #70761 zawierający proponowaną naprawę błędu.
Rozwiązanie zmienia sposób usuwania nieaktualnych metadanych, gdy ich wartość została odtworzona jako __PHP_Incomplete_Class.
Zamiast przekazywać niekompletny obiekt do standardowej funkcji usuwającej metadane, WooCommerce wykorzystuje bezpośrednią operację bazodanową na zapisanej, serializowanej wartości.
Na czym polega zmiana techniczna?
Poprawka obejmuje trzy istotne działania:
- Rozpoznanie wartości reprezentującej niekompletny obiekt PHP.
- Usunięcie nieaktualnego wpisu metadanych bez przekazywania obiektu do mechanizmu, który powoduje Fatal Error.
- Wyczyszczenie odpowiedniej pamięci podręcznej metadanych oraz zapisanie ostrzeżenia w logu.
W przypadku zwykłych wartości WooCommerce nadal korzysta ze standardowego mechanizmu delete_post_meta().
Zmiana dotyczy więc szczególnej sytuacji, w której tradycyjny sposób usuwania danych nie może bezpiecznie obsłużyć obiektu.
Dlaczego poprawka wykorzystuje bezpośrednią operację SQL?
Wcześniejsze fragmenty kodu WooCommerce zawierały już mechanizmy specjalnej obsługi niekompletnych obiektów.
W zgłoszeniu wskazano, że podobne zabezpieczenia dodano wcześniej do operacji zapisywania i usuwania metadanych w innych częściach systemu.
Brakowało ich jednak w konkretnej pętli usuwającej nieaktualne metadane podczas synchronizacji HPOS.
Bezpośrednie usunięcie rekordu na podstawie wartości serializowanej pozwala ominąć etap deserializacji prowadzący do błędu.
Operacja powinna być ograniczona do właściwego rekordu, a po jej wykonaniu pamięć podręczna metadanych musi zostać odpowiednio odświeżona.
W przygotowanej poprawce dla tego szczególnego przypadku nie są wywoływane standardowe akcje WordPressa delete_post_meta i deleted_post_meta. Jest to istotny szczegół dla integracji korzystających z tych hooków.
Czy przygotowana poprawka przeszła testy?
Autor zmiany przeprowadził testy jednostkowe i integracyjne obejmujące opisany scenariusz.
Dodano test, który odtwarza błąd podczas zapisywania zamówienia zawierającego nieaktualne metadane z obiektem nieistniejącej klasy.
Według informacji zawartych w pull requeście test kończy się błędem przed zastosowaniem poprawki, a po jej zastosowaniu przechodzi prawidłowo.
Przeprowadzono również szerszy zestaw kontroli:
- 135 testów OrdersTableDataStoreTests zakończonych pomyślnie;
- 68 testów WC_Order_Data_Store_CPT_Test zakończonych pomyślnie;
- kontrolę składni zmienionego kodu PHP;
- analizę statyczną PHPStan;
- weryfikację zgodności zmiany z wymaganiami projektu.
Autor zwrócił także uwagę na wcześniejszą niestabilność jednego z testów, wynikającą z porównywania czasu modyfikacji zamówienia z dokładnością do jednej sekundy.
Przygotowana zmiana usuwa zależność tego testu od przypadkowego momentu uruchomienia odpowiedniej operacji.
Pozytywne wyniki testów nie oznaczają jednak, że poprawka została już włączona do stabilnego wydania WooCommerce.
Czy poprawka WooCommerce HPOS jest już dostępna?
Według stanu z 8 listopada 2026 roku pull request #70761 nadal ma status Draft.
Oznacza to, że zmiana została przygotowana i przetestowana przez autora, ale nie zakończono jeszcze oficjalnego procesu jej akceptacji.
W opisie wskazano również, że poprawka wymaga niezależnego przeglądu ze względu na wpływ na synchronizację danych i integralność zamówień.
Nie potwierdzono opublikowania stabilnej wersji WooCommerce zawierającej tę zmianę.
Aktualny stan prac można sprawdzić w poprawce WooCommerce HPOS #70761.
Opis pierwotnego problemu znajduje się w zgłoszeniu PHP Fatal Error podczas synchronizacji HPOS #70760.
Jak bezpiecznie przywrócić działanie zamówień do czasu oficjalnej poprawki?
Jeżeli konkretny sklep doświadcza opisanego błędu, działania naprawcze powinny rozpocząć się od zabezpieczenia danych i ustalenia, które zamówienia wywołują wyjątek.
1. Wykonaj kopię zapasową
Kopia powinna obejmować zarówno dedykowane tabele HPOS, jak i tradycyjne tabele WordPressa.
Należy także zabezpieczyć pliki wtyczek, konfigurację sklepu oraz logi umożliwiające późniejszą analizę.
Przy odtwarzaniu kopii trzeba uwzględnić zamówienia złożone po jej wykonaniu. Przywrócenie starszej bazy w działającym sklepie może spowodować utratę nowszych danych.
2. Zidentyfikuj problematyczne zamówienie
Sprawdź dokładny moment wystąpienia Fatal Error oraz identyfikator zamówienia przetwarzanego w tym czasie.
Nie należy zakładać, że wszystkie zamówienia są uszkodzone albo że trzeba przeprowadzić masowe czyszczenie metadanych.
3. Ustal pochodzenie niekompletnego obiektu
Sprawdź, która wtyczka wcześniej zapisywała problematyczny wpis.
Jeżeli metadane pozostały po usuniętym rozszerzeniu, ustal, czy nadal są wykorzystywane przez inne elementy sklepu.
Nie usuwaj ich bez wcześniejszego potwierdzenia znaczenia.
4. Przeprowadź diagnostykę na stagingu
Kopia testowa powinna wykorzystywać tę samą konfigurację HPOS, zgodne wersje PHP oraz odpowiednie dane problematycznego zamówienia.
Po odtworzeniu błędu można sprawdzić, czy zmiana sposobu obsługi metadanych eliminuje wyjątek.
Należy również zweryfikować, czy dane zamówienia pozostają spójne oraz czy po zapisaniu nie występują kolejne błędy synchronizacji.
5. Sprawdź integracje i statusy zamówień
Po przywróceniu działania należy przeanalizować operacje wykonywane w okresie występowania awarii.
Szczególnie ważne jest ustalenie, czy zamówienia zostały prawidłowo zapisane i czy ich stany odpowiadają rzeczywistym płatnościom oraz wykonanym operacjom magazynowym.
W przypadku rozbieżności pomiędzy statusem zamówienia a rzeczywistym stanem finansowym pomocne są zasady opisane w artykule klient zapłacił, a WooCommerce nadal pokazuje „Oczekuje na płatność”.
W obu sytuacjach należy unikać automatycznego ponawiania operacji bez sprawdzenia, co rzeczywiście zostało wykonane.
Czego nie robić podczas naprawy błędu HPOS?
Nieprawidłowa ingerencja w mechanizm przechowywania zamówień może prowadzić do poważniejszych problemów niż sam wyjątek PHP.
- Nie usuwaj masowo metadanych zamówień. Część wpisów może być nadal wykorzystywana przez aktywne rozszerzenia.
- Nie wyłączaj HPOS bez analizy. Zmiana źródła danych może mieć wpływ na działanie integracji i zgodność zamówień.
- Nie przywracaj przypadkowych wtyczek. Starsze rozszerzenia mogą być niezgodne z aktualną wersją PHP albo posiadać podatności bezpieczeństwa.
- Nie poprawiaj ręcznie danych produkcyjnych bez kopii zapasowej. Błędne modyfikacje mogą być trudne do odwrócenia.
- Nie zakładaj, że komunikat HTTP 500 oznacza utratę zamówienia. Stan danych trzeba zweryfikować.
- Nie ponawiaj automatycznie wszystkich operacji po awarii. Część zmian mogła zostać zapisana przed wystąpieniem błędu.
Jak ograniczyć ryzyko podobnych błędów podczas aktualizacji i usuwania wtyczek?
W sklepach WooCommerce korzystających z wielu rozszerzeń szczególne znaczenie ma kontrolowanie sposobu przechowywania danych zamówień.
Przed usunięciem wtyczki warto ustalić, czy zapisuje własne metadane i czy udostępnia mechanizm bezpiecznego usuwania niepotrzebnych informacji.
Należy również sprawdzić, czy inne aktywne rozszerzenia nie korzystają z tych samych danych.
Przy zmianach konfiguracji HPOS istotne jest zachowanie zgodności z rozszerzeniami i synchronizowanych rekordów zamówień.
Nie każdy problem występujący po aktualizacji WooCommerce ma identyczną przyczynę. Przykładowo odrębny błąd związany z przetwarzaniem plików tłumaczeń może prowadzić do PHP Fatal Error w Translations.php i pozostawienia blokady instalacyjnej wc_installing.
Szczegóły tego problemu opisuje artykuł WooCommerce 11.2.2 – PHP Fatal Error podczas aktualizacji, błąd Translations.php i blokada wc_installing.
W obu przypadkach podstawą prawidłowej diagnostyki jest ustalenie miejsca wystąpienia wyjątku i rozróżnienie przyczyny pierwotnej od jej następstw.
Dlaczego bezpieczeństwo danych zamówień jest tak ważne?
Zamówienia zawierają informacje wykorzystywane przez wiele elementów sklepu: płatności, magazyn, systemy logistyczne, fakturowanie i obsługę klienta.
W przypadku rozbudowanych instalacji te same dane mogą być dodatkowo synchronizowane z zewnętrznymi systemami ERP i platformami sprzedażowymi.
Dlatego sklep internetowy korzystający z WooCommerce powinien posiadać aktualne kopie zapasowe oraz kontrolowany proces aktualizacji rozszerzeń, szczególnie tych, które modyfikują lub przechowują dane zamówień.
Równie ważna jest weryfikacja stanu synchronizacji po zmianie konfiguracji HPOS, migracji sklepu lub usunięciu rozszerzenia odpowiedzialnego za niestandardowe metadane.
Najczęściej zadawane pytania o WooCommerce HPOS Fatal Error
Czy HPOS może powodować PHP Fatal Error podczas zapisywania zamówienia?
Tak. W zgłoszeniu #70760 potwierdzono błąd występujący podczas synchronizacji HPOS z tradycyjnymi tabelami WordPressa, gdy usuwane metadane zawierają obiekt nieistniejącej klasy PHP.
Co oznacza __PHP_Incomplete_Class?
Jest to specjalny typ obiektu PHP, który może powstać podczas odtwarzania serializowanych danych, jeśli definicja oryginalnej klasy nie jest dostępna.
Czy usunięcie wtyczki może spowodować błąd zapisywania zamówień?
Może, jeżeli wtyczka wcześniej zapisywała serializowane obiekty PHP i pozostawiła je w metadanych. Samo usunięcie dowolnej wtyczki nie oznacza jednak automatycznie wystąpienia błędu.
Czy problem dotyczy wszystkich instalacji WooCommerce z HPOS?
Nie. Konieczne jest spełnienie konkretnych warunków, w tym włączonej synchronizacji zgodności i obecności określonych nieaktualnych metadanych.
Czy błąd powoduje utratę zamówień?
Nie potwierdzono masowego usuwania zamówień. Problem dotyczy przerwania operacji zapisu i synchronizacji. Po wystąpieniu błędu należy zweryfikować stan konkretnego zamówienia.
Czy wyłączenie trybu zgodności HPOS jest bezpieczne?
Zależy od konfiguracji sklepu. Starsze integracje mogą korzystać z tradycyjnych tabel WordPressa, dlatego wyłączenie synchronizacji bez sprawdzenia zależności może powodować problemy z aktualnością danych.
Czy można usunąć niekompletne obiekty z bazy danych?
Możliwe jest usunięcie nieaktualnych metadanych po ustaleniu ich pochodzenia i znaczenia. Nie należy jednak wykonywać masowych operacji usuwania bez analizy oraz aktualnej kopii zapasowej.
Czy problem wynika z wersji PHP?
Nie wskazano jednej wersji PHP jako przyczyny. Zgłoszenie dotyczy obsługi niekompletnych obiektów przez określoną ścieżkę kodu WordPressa i WooCommerce.
Czy WooCommerce przygotowało poprawkę?
Tak. Pull request #70761 zawiera rozwiązanie polegające na bezpiecznym usuwaniu metadanych zawierających niekompletne obiekty PHP.
Czy poprawka została już opublikowana?
Według stanu z 8 listopada 2026 roku poprawka nadal oczekuje na niezależny przegląd i nie potwierdzono jej obecności w stabilnym wydaniu WooCommerce.
Podsumowanie: nieaktualne metadane mogą przerwać synchronizację zamówień WooCommerce
Błąd WooCommerce #70760 dotyczy szczególnego scenariusza synchronizacji zamówień pomiędzy HPOS a tradycyjnymi tabelami WordPressa.
Jeżeli starszy rekord zamówienia zawiera serializowany obiekt PHP, którego oryginalna klasa nie jest już dostępna, próba usunięcia metadanych może zakończyć się wyjątkiem związanym z __PHP_Incomplete_Class.
W rezultacie operacja zapisu zamówienia zostaje przerwana komunikatem „The script tried to modify a property on an incomplete object”.
Problem jest szczególnie istotny dla sklepów, w których wcześniej instalowano i usuwano rozszerzenia zapisujące niestandardowe dane zamówień, a HPOS działa jednocześnie z synchronizacją zgodności.
Przygotowana poprawka #70761 wprowadza specjalną obsługę niekompletnych obiektów podczas usuwania nieaktualnych metadanych. Testy potwierdziły usunięcie błędu w odtworzonym scenariuszu, ale oficjalne wydanie poprawki nie zostało jeszcze potwierdzone.
Do czasu jej udostępnienia administratorzy powinni zwracać szczególną uwagę na błędy zapisu zamówień, sprawdzać logi PHP oraz unikać pochopnego usuwania danych i zmiany konfiguracji HPOS.
Najważniejsze jest zachowanie spójności danych zamówień oraz identyfikowanie dokładnej przyczyny błędu przed rozpoczęciem działań naprawczych.