在 WC 3.0+ 的单品页面中显示接近销售价格的折扣百分比
Display the discounted percentage near sale price in Single product pages for 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 . '%' );
}
Updated - 2019 (avoid rounding price issue) - 2017 (avoid NAN%
percentage value)
woocommerce_sale_price_html
挂钩已被 WooCommerce 3.0+ 中的另一个挂钩取代,现在有 3 个参数(但不是 $product
争论了)。
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)
$_reg_price = floatval( strip_tags($regular_price) );
$_sale_price = floatval( strip_tags($sale_price) );
// Percentage calculation and text
$percentage = round( ( $_reg_price - $_sale_price ) / $_reg_price * 100 ).'%';
$percentage_txt = ' ' . __(' Save ', 'woocommerce' ) . $percentage;
$formatted_regular_price = is_numeric( $regular_price ) ? wc_price( $regular_price ) : $regular_price;
$formatted_sale_price = is_numeric( $sale_price ) ? wc_price( $sale_price ) : $sale_price;
echo '<del>' . $formatted_regular_price . '</del> <ins>' . $formatted_sale_price . $percentage_txt . '</ins>';
}
此代码位于您的活动子主题(或多个主题)的 function.php 文件中或任何插件文件中。
该代码已经过测试并且可以工作。对于 WooCommerce 版本 3.0+ (感谢@Mikebcn 和@AsifRao)
要将百分比四舍五入,您可以使用 round()
, number_format()
or number_format_i18n()
:
$percentage = number_format_i18n( ( $_reg_price - $_sale_price ) / $_reg_price * 100, 0 ).'%';
$percentage = number_format( ( $_reg_price - $_sale_price ) / $_reg_price * 100, 0 ).'%';
原答案代码:下面是功能相似的代码:
// 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+。
我在主题的 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 . '%' );
}
Updated - 2019 (avoid rounding price issue) - 2017 (avoid
NAN%
percentage value)
woocommerce_sale_price_html
挂钩已被 WooCommerce 3.0+ 中的另一个挂钩取代,现在有 3 个参数(但不是 $product
争论了)。
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)
$_reg_price = floatval( strip_tags($regular_price) );
$_sale_price = floatval( strip_tags($sale_price) );
// Percentage calculation and text
$percentage = round( ( $_reg_price - $_sale_price ) / $_reg_price * 100 ).'%';
$percentage_txt = ' ' . __(' Save ', 'woocommerce' ) . $percentage;
$formatted_regular_price = is_numeric( $regular_price ) ? wc_price( $regular_price ) : $regular_price;
$formatted_sale_price = is_numeric( $sale_price ) ? wc_price( $sale_price ) : $sale_price;
echo '<del>' . $formatted_regular_price . '</del> <ins>' . $formatted_sale_price . $percentage_txt . '</ins>';
}
此代码位于您的活动子主题(或多个主题)的 function.php 文件中或任何插件文件中。
该代码已经过测试并且可以工作。对于 WooCommerce 版本 3.0+ (感谢@Mikebcn 和@AsifRao)
要将百分比四舍五入,您可以使用 round()
, number_format()
or number_format_i18n()
:
$percentage = number_format_i18n( ( $_reg_price - $_sale_price ) / $_reg_price * 100, 0 ).'%';
$percentage = number_format( ( $_reg_price - $_sale_price ) / $_reg_price * 100, 0 ).'%';
原答案代码:下面是功能相似的代码:
// 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+。