Покажите скидку в процентах от цены продажи на страницах одного продукта для WC 3.0+

У меня был этот код в function.php моей темы, чтобы отобразить процент после цены, и он отлично работал в WooCommerce v2.6.14.

Но этот фрагмент больше не работает на WooCommerce версии 3.0+.

Как я могу это исправить?

Вот этот код:

 // Add save percent next to sale item prices. add_filter( 'woocommerce_sale_price_html', 'woocommerce_custom_sales_price', 10, 2 ); function woocommerce_custom_sales_price( $price, $product ) { $percentage = round( ( ( $product->regular_price - $product->sale_price ) / $product->regular_price ) * 100 ); return $price . sprintf( __(' Save %s', 'woocommerce' ), $percentage . '%' ); } 

woocommerce_sale_price_html hook был заменен другим крюком в WooCommerce 3.0+, у которого теперь есть 3 аргумента (но не аргумент $product больше).

Вот такой функциональный аналогичный код:

 // Only for WooCommerce version 3.0+ add_filter( 'woocommerce_format_sale_price', 'woocommerce_custom_sales_price', 10, 3 ); function woocommerce_custom_sales_price( $price, $regular_price, $sale_price ) { $percentage = round( ( $regular_price - $sale_price ) / $regular_price * 100 ).'%'; $percentage_txt = __(' Save ', 'woocommerce' ).$percentage; $price = '<del>' . ( is_numeric( $regular_price ) ? wc_price( $regular_price ) : $regular_price ) . '</del> <ins>' . ( is_numeric( $sale_price ) ? wc_price( $sale_price ) . $percentage_txt : $sale_price . $percentage_txt ) . '</ins>'; return $price; } 

Этот код находится в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

Этот код протестирован и работает только для WooCommerce версии 3.0+


Обновите, чтобы избежать процентного значения NAN% когда обычные и продажные цены html предварительно отформатированы:

 add_filter( 'woocommerce_format_sale_price', 'woocommerce_custom_sales_price', 10, 3 ); function woocommerce_custom_sales_price( $price, $regular_price, $sale_price ) { // Getting the clean numeric prices (without html and currency) $regular_price = floatval( strip_tags($regular_price) ); $sale_price = floatval( strip_tags($sale_price) ); // Percentage calculation and text $percentage = round( ( $regular_price - $sale_price ) / $regular_price * 100 ).'%'; $percentage_txt = __(' Save ', 'woocommerce' ).$percentage; return '<del>' . wc_price( $regular_price ) . '</del> <ins>' . wc_price( $sale_price ) . $percentage_txt . '</ins>'; } 

Этот код находится в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

Этот код проверен и работает только для WooCommerce версии 3.0+ (благодаря @AsifRao)