Jeszcze przed godziną 6 dostałem pierwsze zgłoszenia od niektórych klientów, że przy próbie edycji istniejącego produktu lub próbie dodania nowego w sklepie na WooCommerce WordPress wyrzuca błąd krytyczny. Z tego, co wodzę, na związanych z WordPressem i/lub WooCommerce grupach również zaczynają się pojawiać posty na ten temat. I choć jeszcze odpowiedniej poprawki nie ma, to na szczęście błąd da się relatywnie łatwo wyeliminować.
Spis treści w artykule
Błąd krytyczny w sklepie na WooCommerce przy próbie edycji produktu
Problem dotyczy najnowszych tłumaczeń dla języka polskiego dla wtyczki WooCommerce, które – co dodatkowo zwiększa skalę problemu – WordPress instaluje właściwie automatycznie, a więc dotkniętych stron może być sporo. Choć jeśli problem w tłumaczeniach zostanie naprawiony niebawem, to może wielu właścicieli sklepów nawet go nie zauważy, bo dotyczy on tylko sytuacji, gdy chcemy wejść w ekran edycji produktu (istniejącego lub nowego). Wtedy pojawia się błąd w stylu:
Fatal error: Uncaught ValueError: Unknown format specifier „Z” in D:\VM\Local\woocommerce-dev\app\public\wp-content\plugins\woocommerce\includes\admin\class-wc-admin-post-types.php on line 128
W witrynie wystąpił błąd krytyczny. W wiadomości wysłanej na adres e-mail administratora strony umieszczono dodatkowe instrukcje.
I choć to jest trochę rozszerzona wersja błędu, to i tak niewiele mówi. Przynajmniej do momentu, aż nie zerkniemy do wskazanego pliku i linijki 128:
1 => sprintf( __( 'Product updated. <a href="%s">View Product</a>', 'woocommerce' ), esc_url( get_permalink( $post->ID ) ) ),
Odrobinę więcej pokazuje tryb debugowania WordPressa:
[20-Jan-2023 03:52:16 UTC] PHP Fatal error: Uncaught ValueError: Unknown format specifier "Z" in D:\VM\Local\sklep\app\public\wp-content\plugins\woocommerce\includes\admin\class-wc-admin-post-types.php:128
Stack trace:
#0 D:\VM\Local\sklep\app\public\wp-content\plugins\woocommerce\includes\admin\class-wc-admin-post-types.php(128): sprintf('Produkt zaktual...', '<a id="woocomme...', '</a>')
Wygląda, jak wygląda, ale naprowadza na plik z tłumaczenia, gdzie faktycznie widać, że jest błąd:
Angielski oryginał to:
Product updated. %1$sView Product%2$s
Obecne, błędne tłumaczenie:
Produkt zaktualizowany. %1$Zobacz produkt%2$s
A powinno być:
Produkt zaktualizowany. %1$sZobacz produkt%2$s
Jak widać różnica niewielka, właściwie pomijalna – brak „s” po pierwszym znaku dolara – a takie problemy. Ale tylko w wersji PHP 8+, bo np. w PHP 7.4 edycja produktu działa.
Tymczasowe rozwiązanie problemu
Najlepsze rozwiązanie to oczywiście aktualizacja tłumaczenia serwowanego przez WordPressa, ale obecnie na nie jeszcze czekamy. Można samodzielnie zmienić tłumaczenie, można nawet tymczasowo wspomniany plik PHP (class-wc-admin-post-types.php).
Można też tymczasowo cofnąć wersję PHP na serwerze (hostingu) do 7.4, gdzie nie ma tego problemu, ale chyba najlepszym i najprostszym rozwiązaniem, jest tymczasowa zmiana języka profilu użytkownika (nie całej strony, ale tylko danego użytkownika) na inny niż polski, np. na angielski. Zwłaszcza że jest to rozwiązanie, które może wdrożyć właściwie każdy, nawet bez pomocy „specjalisty informatyka”.
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01