[Gelöst] Kritischer Fehler bei Update auf PHP 8... | String Übersetzung von Variable
Dieses Thema ist gelöst. Hier finden Sie eine Beschreibung des Problems und der Lösung.
Problem: Wenn Sie Ihre PHP-Version auf PHP 8.xx erhöhen, erhalten Sie einen kritischen Fehler in der Datei
class-wc-post-types.php
von WooCommerce, verursacht durch eine fehlerhafte Formatangabe in einer übersetzten Zeichenkette. Solution: Dies scheint ein Bug in der aktuellen Version unserer Plugins zu sein, der bereits untersucht wird. Eine mögliche Lösung ist, alle betroffenen Strings in die Standardsprache (in diesem Fall Deutsch) zu übersetzen, um den Fehler zu vermeiden. Ein alternativer Workaround ist verfügbar unter: WPML String Translation 3.2.10 Fatal Error due to Format Specifier. Es ist sicher, den Inhalt des Ordners
/wp-content/languages/wpml/missing/
zu löschen, aber es wird empfohlen, eine Sicherungskopie der Dateien zu erstellen.
Falls diese Lösung für Sie nicht relevant ist oder veraltet erscheint, überprüfen Sie bitte die bekannten Probleme, bestätigen Sie die Version der dauerhaften Lösung und stellen Sie sicher, dass Sie die neuesten Versionen von Themes und Plugins installiert haben. Sollten weiterhin Probleme auftreten, empfehlen wir, ein neues Support-Ticket zu eröffnen.
Dies ist das technische Support-Forum für WPML – das mehrsprachige WordPress-Plugin.
Mitlesen können alle, doch nur WPML-Kunden können hier Fragen veröffentlichen. Das WPML-Team antwortet im Forum an 6 Tagen pro Woche, 22 Stunden am Tag.
wir erhalten einen kritischen Fehler wenn wir die PHP Version auf PHP 8.xx anheben. Die Fehlermeldung lautet:
Ein Fehler vom Typ E_ERROR wurde in der Zeile 234 der Datei /home/wp/disk/wordpress/wp-content/plugins/woocommerce/includes/class-wc-post-types.php verursacht. Fehlermeldung: Uncaught ValueError: Missing format specifier at end of string in /home/wp/disk/wordpress/wp-content/plugins/woocommerce/includes/class-wc-post-types.php:234
Stack trace:
#0 /home/wp/disk/wordpress/wp-content/plugins/woocommerce/includes/class-wc-post-types.php(234): sprintf()
#1 /home/wp/disk/wordpress/wp-includes/class-wp-hook.php(324): WC_Post_Types::register_taxonomies()
#2 /home/wp/disk/wordpress/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters()
#3 /home/wp/disk/wordpress/wp-includes/plugin.php(517): WP_Hook->do_action()
#4 /home/wp/disk/wordpress/wp-settings.php(645): do_action()
#5 /home/wp/disk/wordpress/wp-config.php(63): require_once('/home/wp/disk/w...')
#6 /home/wp/disk/wordpress/wp-load.php(50): require_once('/home/wp/disk/w...')
#7 /home/wp/disk/wordpress/wp-login.php(12): require('/home/wp/disk/w...')
#8 {main}
thrown
Die dazugehörige Zeile in der class-wc-post-types.php sieht so aus:
Ich habe jetzt in den WPML String Translations nachgeschaut und gesehen das mehrere Strings übersetzt wurden (nicht nur woocommerce). Siehe Screenshot. Die Übersetzung sieht z.B. so aus:
All %s | Tous(tes) les %s
Meine Frage ist nun: Herauslöschen lässt sich die Übersetzung scheinbar nicht:
*Können wir hier einfach in der Übersetzung die Urpsrungs Variable wieder einsetzen? *All %s*
*Scheinbar hat man nicht nur einen woocommerce String übersetzt sondern auch weitere, sollte man die auch gleich alle überschreiben?
Es sollte keine negativen Auswirkungen haben, aber Du kannst sicherheitshalber eine Kopie der Dateien auf Deinem Computer abspeichern und dies bei Bedarf wieder auf den Server hochladen.
Das Übersetzen aller dieser Strings auf Deinem Screenshot Deutsch löste das Problem bei meinem Test auf einer anderen Website ebenfalls.
Wann ein Fix zum Problem verfügbar sein wird, kann ich aktuell noch nicht sagen, da vor diesem Problem zuvor eine anderes verbundenes Problem mit dem Update zu WPML 4.6.11 gelöst werden muss.