@alexiusgrey

Как сделать, чтобы php8+ понимал woocommerce_format_localized_decimal?

Пользуюсь Hyyan Polylang for Woocommerce практически во всех своих работах. он старый, но мне нравится, и единственный бесплатный.
На php7.4 все отлично, но когда на хосте переключаюсь на php8+, то падает страница вариативного товара - нет кнопки, пропадают некоторые другие скрипты. В конфиге включил дебаг, и на месте кнопки выдало
Fatal error: Uncaught TypeError: NumberFormatter::format(): Argument #1 ($num) must be of type int|float, string given in /home/t80469/public_html/wp-content/plugins/woo-poly-integration/src/Hyyan/WPI/LocaleNumbers.php:97 Stack trace: #0 /home/t80469/public_html/wp-content/plugins/woo-poly-integration/src/Hyyan/WPI/LocaleNumbers.php(97): NumberFormatter->format('', 3) #1 /home/t80469/public_html/wp-includes/class-wp-hook.php(308): Hyyan\WPI\LocaleNumbers->getLocalizedDecimal('', '') #2 /home/t80469/public_html/wp-includes/plugin.php(205): WP_Hook->apply_filters('', Array) #3 /home/t80469/public_html/wp-content/plugins/woocommerce/includes/wc-formatting-functions.php(358): apply_filters('woocommerce_for...', '', '') #4 [internal function]: wc_format_localized_decimal('') #5 /home/t80469/public_html/wp-content/plugins/woocommerce/includes/wc-formatting-functions.php(1330): array_map('wc_format_local...', Array) #6 /home/t80469/public_html/wp-content/plugins/woocommerce/includes/class-wc-product-variable.php(370): wc_format_dimensions(Array) #7 /home/t80469/public_html/wp-content/plugins/woocommerce/includes/class-wc-product-variable.php(312): WC_Product_Variable->get_available_variation(Object(WC_Product_Variation)) #8 /home/t80469/public_html/wp-content/plugins/woocommerce/includes/wc-template-functions.php(1749): WC_Product_Variable->get_available_variations() #9 /home/t80469/public_html/wp-includes/class-wp-hook.php(308): woocommerce_variable_add_to_cart('') #10 /home/t80469/public_html/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters('', Array) #11 /home/t80469/public_html/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #12 /home/t80469/public_html/wp-content/plugins/woocommerce/includes/wc-template-functions.php(1697): do_action('woocommerce_var...') #13 /home/t80469/public_html/wp-includes/class-wp-hook.php(308): woocommerce_template_single_add_to_cart('') #14 /home/t80469/public_html/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters(NULL, Array) #15 /home/t80469/public_html/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #16 /home/t80469/public_html/wp-content/plugins/woocommerce/templates/content-single-product.php(60): do_action('woocommerce_sin...') #17 /home/t80469/public_html/wp-includes/template.php(785): require('/home/t80469/pu...') #18 /home/t80469/public_html/wp-content/plugins/woocommerce/includes/wc-core-functions.php(284): load_template('/home/t80469/pu...', false) #19 /home/t80469/public_html/wp-content/plugins/woocommerce/templates/single-product.php(37): wc_get_template_part('content', 'single-product') #20 /home/t80469/public_html/wp-includes/template-loader.php(106): include('/home/t80469/pu...') #21 /home/t80469/public_html/wp-blog-header.php(19): require_once('/home/t80469/pu...') #22 /home/t80469/public_html/index.php(17): require('/home/t80469/pu...') #23 {main} thrown in /home/t80469/public_html/wp-content/plugins/woo-poly-integration/src/Hyyan/WPI/LocaleNumbers.php on line 97

Я пошел в /plugins/woo-poly-integration/src/Hyyan/WPI/LocaleNumbers.php, и методом проб и ошибок нашел, что если закомментировать строку
add_filter('woocommerce_format_localized_decimal', array($this, 'getLocalizedDecimal'), 10, 2);

То кнопка появляется и уведомление дебаггера пропадает.
Но насколько эта строка важная для работы плагина я не знаю.
Что нужно php8, чтобы он видел этот формат woocommerce_format_localized_decimal?
Или 7.4 php еще нескоро устареет и можно на ней оставаться?
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
@weart
Поскольку плагин больше не поддерживается, можете править его файлы

в этом месте попробуйте заменить на

$retval = $a->format((float) $input, \NumberFormatter::TYPE_DOUBLE);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы