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?
- 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.
- Aktualizujemy WP Rocket do wersji 3.6.4.
- Następnie wykonujemy update Woocommerce do wersji 4.4.0
Inne rozwiązania problemu:
- Zmiana nazwy folderu „wprocket” na serwerze, co wyłączy automatycznie wtyczkę. Następnie możemy wykonać ręczną aktualizację.
- 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.
Dodaj komentarz