Support » Plugin: WooCommerce » Critical error with PHP 8

  • Resolved w-sky

    (@w-sky)


    Hello, when I try to switch our server to PHP 8, I am getting the following error message from WordPress. Any help with that?

    WordPress Version 6.0.1
    Active Theme: Deli (Version 2.0.15)
    Current Plugin: WooCommerce (Version 6.7.0)
    PHP Version 8.1.8

    Error Details
    =============
    An error of type E_ERROR was caused in line 234 of the file /usr/www/users/web1/wp-content/plugins/woocommerce/includes/class-wc-post-types.php. Error message: Uncaught ValueError: Missing format specifier at end of string in /usr/www/users/web1/wp-content/plugins/woocommerce/includes/class-wc-post-types.php:234
    Stack trace:
    #0 /usr/www/users/web1/wp-content/plugins/woocommerce/includes/class-wc-post-types.php(234): sprintf()
    #1 /usr/www/users/web1/wp-includes/class-wp-hook.php(307): WC_Post_Types::register_taxonomies()
    #2 /usr/www/users/web1/wp-includes/class-wp-hook.php(331): WP_Hook->apply_filters()
    #3 /usr/www/users/web1/wp-includes/plugin.php(476): WP_Hook->do_action()
    #4 /usr/www/users/web1/wp-settings.php(598): do_action()
    #5 /usr/www/users/web1/wp-config.php(96): require_once(‘/usr/www/users/…’)
    #6 /usr/www/users/web1/wp-load.php(50): require_once(‘/usr/www/users/…’)
    #7 /usr/www/users/web1/wp-admin/admin.php(34): require_once(‘/usr/www/users/…’)
    #8 /usr/www/users/web1/wp-admin/index.php(10): require_once(‘/usr/www/users/…’)
    #9 {main}
    thrown

Viewing 15 replies - 1 through 15 (of 18 total)
  • Hi there,

    Thanks for getting back to us.

    I just checked WooCommerce with PHP 8.1, and I can see it’s working fine for me.

    Seems like this issue is coming from some third-party plugin or a theme you are using on the site.

    Can you please try to deactivate all the plugins and keep only WooCommerce activated with the Storefront [theme](https://pcm.wordpress.org/themes/storefront/)?

    Let me know if you are still able to replicate the issue.

    Best,

    I just got the same error in my local environment (php 8 too). It happend when I tried to add a “size” attribute. Before everything worked fine, despite other plugins / theme. As soon as I hit “save” I got the error message.

    Update: The problem was neither a plugin nor my theme – somehow the automatic database update of WooCommerce did not switch on, which probably messed something up.

    I first tried deleting WooCommerce completely and reinstalling it using the .zip installer – that didn’t work. The next attempt was to deactivate all plugins and do the same again – also unsuccessful.

    What finally worked was to delete WooCommerce manually, deactivate all other plugins and then reload woocommerce via the installer in the backend – this also brought up the message to update the database.

    After that, I was able to reactivate everything and the site is up and running again. The previously registered attribute is now also there, and adding more works.

    Plugin Support Leo a11n

    (@leoa11n)

    Hi @azragh,

    Thank you for the update and for letting us know how you were able to fix the issue.

    Um. Another update – I didn’t recognize that Loco Translate wasn’t active – after reactivating it I get the error again.

    https://wordpress.org/support/topic/loco-leads-to-a-fatal-error-when-switching-from-php-7-3-to-8-0/

    https://localise.biz/wordpress/plugin/faqs/printf-errors

    » It seems like there is truely an error in the WooCommerce translation strings. I tested it with the storefront theme and only WooCommerce and Loco Translate, there you go:

    Fatal error: Uncaught ValueError: Missing format specifier at end of string in C:\xampp\htdocs\ntd_woocommerce\wp-content\plugins\woocommerce\includes\class-wc-post-types.php:234 Stack trace: #0 C:\xampp\htdocs\ntd_woocommerce\wp-content\plugins\woocommerce\includes\class-wc-post-types.php(234): sprintf(‘Alle %’, ‘Farbe’) #1 C:\xampp\htdocs\ntd_woocommerce\wp-includes\class-wp-hook.php(307): WC_Post_Types::register_taxonomies(”) #2 C:\xampp\htdocs\ntd_woocommerce\wp-includes\class-wp-hook.php(331): WP_Hook->apply_filters(NULL, Array) #3 C:\xampp\htdocs\ntd_woocommerce\wp-includes\plugin.php(476): WP_Hook->do_action(Array) #4 C:\xampp\htdocs\ntd_woocommerce\wp-settings.php(598): do_action(‘init’) #5 C:\xampp\htdocs\ntd_woocommerce\wp-config.php(116): require_once(‘C:\\xampp\\htdocs…’) #6 C:\xampp\htdocs\ntd_woocommerce\wp-load.php(50): require_once(‘C:\\xampp\\htdocs…’) #7 C:\xampp\htdocs\ntd_woocommerce\wp-admin\admin.php(34): require_once(‘C:\\xampp\\htdocs…’) #8 C:\xampp\htdocs\ntd_woocommerce\wp-admin\plugins.php(10): require_once(‘C:\\xampp\\htdocs…’) #9 {main} thrown in C:\xampp\htdocs\ntd_woocommerce\wp-content\plugins\woocommerce\includes\class-wc-post-types.php on line 234

    Plugin Support con

    (@conschneider)

    Engineer

    Howdy,

    It seems like there is truely an error in the WooCommerce translation strings.

    Yes, it looks like one of your attribute translations might be causing this. Could locate your language files and temporarily remove them.

    Does that change anything?

    Kind regards,

    Thread Starter w-sky

    (@w-sky)

    I do also use WPML and LocoTranslate on the site. When it comes to the attributes on wp-admin/admin.php?page=wpml-wcml&tab=slugs, I have some translated, most without translation.

    I have found that PHP 8.1 works fine when the plugin “WPML String Translation” is deactivated. But once I activate it again, critical error.

    WordPress-Version 6.0.1
    Aktives Theme: Deli (Version 2.0.15)
    Aktuelles Plugin: WooCommerce (Version 6.8.1)
    PHP-Version 8.1.9
    
    Fehler-Details
    ==============
    Ein Fehler vom Typ E_ERROR wurde in der Zeile 234 der Datei /usr/www/users/public/wp-content/plugins/woocommerce/includes/class-wc-post-types.php verursacht. Fehlermeldung: Uncaught ValueError: Missing format specifier at end of string in /usr/www/users/public/wp-content/plugins/woocommerce/includes/class-wc-post-types.php:234
    Stack trace:
    #0 /usr/www/users/public/wp-content/plugins/woocommerce/includes/class-wc-post-types.php(234): sprintf()
    #1 /usr/www/users/public/wp-includes/class-wp-hook.php(307): WC_Post_Types::register_taxonomies()
    #2 /usr/www/users/public/wp-includes/class-wp-hook.php(331): WP_Hook->apply_filters()
    #3 /usr/www/users/public/wp-includes/plugin.php(476): WP_Hook->do_action()
    #4 /usr/www/users/public/wp-settings.php(598): do_action()
    #5 /usr/www/users/public/wp-config.php(96): require_once('/usr/www/users/...')
    #6 /usr/www/users/public/wp-load.php(50): require_once('/usr/www/users/...')
    #7 /usr/www/users/public/wp-admin/admin.php(34): require_once('/usr/www/users/...')
    #8 /usr/www/users/public/wp-admin/index.php(10): require_once('/usr/www/users/...')
    #9 {main}
      thrown
    
    Thread Starter w-sky

    (@w-sky)

    PS: While WPML String Translation is deactivated, WooCommerce Multilingual & Multicurrency is enabled but not effective because it requires WPML String Translation in order to work.
    But when I only deactivate WooCommerce Multilingual & Multicurrency before switching from 7.4 to 8.1, it’s still a critical error.

    Mirko P.

    (@rainfallnixfig)

    Hi @w-sky,

    Thanks for the update.

    It sounds like a plugin conflict. Please follow the instructions by wpcohort and contact the plugin(s) author(s) to get it fixed. Since this forum is exclusively for WooCommerce core we might not be able to help much with third-party plugins’ conflicts.

    Thanks.

    Tim W

    (@timwhitlock)

    I have written in detail about this fairly common problem. https://localise.biz/wordpress/plugin/faqs/printf-errors

    The OP shows error message “Uncaught ValueError: Missing format specifier at end of string”. This is an incorrectly formatted translation. Unless it occurs during the rendering of a source string, then woocommerce is not at fault. The error lies with the person who entered the erroneous text, regardless of what tool they used to get it in there.

    Subsequent poster (azragh) has more detail in his error logs showing that the bad string in his case is "Alle %" – this should be "Alle %s. The source string in woocommerce is "All %s".

    Thread Starter w-sky

    (@w-sky)

    I have opened at ticket/bug report at wmpl.org, hope they will be able to help.

    @timwhitlock I totally overlooked this. Thx for pointing that one out.

    The language file with the missing “s” was in ..\wp-content\languages\loco\plugins (woocommerce-de_DE.po). Adding it manually and compiling the file to .mo (https://po2mo.net/) worked for me.

    Plugin Support Kaushik S. a11n

    (@kaushiksomaiya)

    Hi there @w-sky

    Like @timwhitlock mentioned, there can be variables in the translated string. Plugins like Loco translate give a warning if we don’t specify the required %s in the translated string – I am not sure what may have caused this in your case.

    Do keep us posted on the progress of your issue. 🙂

    @azragh, happy to know that @timwhitlock’s solution worked for you.

    Thread Starter w-sky

    (@w-sky)

    Hello @timwhitlock and @azragh

    I searched for “Alle %” in woocommerce-de_DE.po and could not find any missing “s” from “%s” in our translations.
    Did you find only this one case?

    Nevertheless, I guess an error like this in a translation file should not alone cause a critical error in WordPress. (And why with PHP 8 and not with PHP 7?)

Viewing 15 replies - 1 through 15 (of 18 total)
  • The topic ‘Critical error with PHP 8’ is closed to new replies.