Ostatnio otrzymaliśmy dużą aktualizację WordPress 5.5, o której mogłeś przeczytać w poprzednim wpisie na blogu Zakoduje. Następnie udostępniona została nowa wersja najpopularniejszej platformy sprzedażowej w WordPress. W efekcie otrzymaliśmy krytyczny problem Woocommerce, który pomimo groźnego wyglądu, jest łatwy w naprawie.

Problem Woocommerce 4.4.0 – przyczyny.

Wtyczka Woocommerce w najnowszej wersji otrzymała wsparcie nowej wersji paczki „league/container”. Jest to pakiet rozwiązań PHP dla developerów, służący w dużym skrócie do implementacji wzorca projektowego Dependency Injection (Wstrzykiwanie Zależności). Podstawową zasadą działania tego wzorca jest posiadanie usługi, która zajmuje się uzupełnianiem potrzebnych zależności w trakcie tworzenia aplikacji webowych. Zainteresowanych odsyłam do oficjalnej strony projektu Container.

Woocommerce w wersji 4.4.0 wprowadził wsparcie nowej wersję paczki (3.3.1) co łatwo wyczytamy w oficjalnym repozytorium. Niestety spowodowało to masę błędów, gdyż paczka ta nie jest kompatybilna z jej poprzednią wersją (2.0). Ta wykorzystywana jest chociażby w popularnym narzędziu do optymalizacji jakim jest WP Rocket.

Problem Woocommerce – objawy.

Cała awaria ma jeden groźnie wyglądający i ciężki do przeoczenia objaw. Mianowicie po aktualizacji Woocommerce próba wejścia na naszą witrynę kończy się wyświetleniem krytycznego błędu o treści:

Fatal error: Declaration of Automattic\WooCommerce\Internal\DependencyManagement\ExtendedContainer::get($id, bool $new = false) must be compatible with League\Container\Container::get($alias, array $args = Array) in /wp-content/plugins/woocommerce/src/Internal/DependencyManagement/ExtendedContainer.php on line 18

Blokuje to dostęp do naszej strony w całkowitym stopniu – zarówno do treści, które na niej wyświetlamy, jak i do panelu administracyjnego WordPressa.

Rozwiązanie awarii po aktualizacji Woocommerce.

Jak szybko się okazało problem dotyczy kombinacji wtyczki wspomnianej wyżej WP Rocket i Woocommerce. Zespół WP Rocket na szczęście szybko wypuścił poprawkę 3.6.4, która usuwa problem, ale ciężko określić, które pluginy będą podobnie uciążliwe. Z tego co udało mi się wyśledzić, awaryjna na pewno jest wtyczka Lazy Load. Jak można zatem usunąć problem Woocommerce?

  1. Wycofujemy wersję Woocommerce do poprzedniej wersji 4.3.3 – można znaleźć ją pod tym linkiem. Wystarczy ją pobrać, ręcznie usunąć (za pomocą klienta FTP) pliki nowej wersji oraz przerzucić folder „woocommerce” do folderu „plugins” na naszej stronie.
  2. Aktualizujemy WP Rocket do wersji 3.6.4.
  3. Następnie wykonujemy update Woocommerce do wersji 4.4.0

Inne rozwiązania problemu:

  1. Zmiana nazwy folderu „wprocket” na serwerze, co wyłączy automatycznie wtyczkę. Następnie możemy wykonać ręczną aktualizację.
  2. Usunięcie wtyczki WP Rocket i instalacja najnowszej wersji.

Osobiście chwilowo wykonuję rollback Woocommerce do poprzedniej wersji oraz poczekam chwilę z aktualizacją aż do wypuszczenia poprawek wszystkich innych wtyczek, które mogą „nie dogadać się” z modułem sklepowym do WordPress. Wtyczkę Lazy Load warto usunąć ze swojej strony – aktualizacja systemu do wersji 5.5, o której pisałem w tym artykule wprowadziła wbudowane opóźnione wczytywanie obrazów, więc wszelkie zewnętrzne rozwiązania przestają być potrzebne.

Zainteresowanych całą sytuacją zapraszam na oficjalne forum WordPress, gdzie omawiany jest problem.

Problem Woocommerce? Twoja witryna uległa awarii? Nie czekaj, skontaktuj się z nami! Przeczytaj artykuł na temat opieki nad swoim blogiem oraz sprawdź ofertę wsparcia strony internetowej.