在 WC 3.0+ 的单个产品页面中显示接近销售价格的折扣百分比

Posted

技术标签:

【中文标题】在 WC 3.0+ 的单个产品页面中显示接近销售价格的折扣百分比【英文标题】:Display the discounted percentage near sale price in Single product pages for WC 3.0+ 【发布时间】:2017-10-01 03:50:00 【问题描述】:

我在我的主题的function.php 中有这个代码来显示价格后的百分比,它在 WooCommerce v2.6.14 中运行良好。

但是这个 sn-p 不再适用于 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 . '%' );

【问题讨论】:

【参考方案1】:

更新 - 2019 (避免四舍五入的价格问题) - 2017 (避免 NAN% 百分比值)

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()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+。

【讨论】:

其返回的 NAN% @LoicTheAztec 在我的例子中 $regular_price returning "65.99$span>" 不仅是正常价格,还有所有这些 html,这就是它返回 nan 的原因 @LoicTheAztec 意识到改变价格的是 WooCommerce 的测量价格计算器。必须手动编辑插件的文件并将其保存为不同的名称:( @LoicTheAztec 没有钩子,只是插件中的一个函数可以更改显示的价格。在插件文档中说,任何改变价格都存在重大冲突 这显然不适用于变体产品。

以上是关于在 WC 3.0+ 的单个产品页面中显示接近销售价格的折扣百分比的主要内容,如果未能解决你的问题,请参考以下文章

使用 WC_Query 获取销售的 WooCommerce 产品

php 更改WooCommerce单个产品页面位置为结局的商人主题:WooCommerce销售倒计时计时器和折扣插件

php [在存档页面上显示产品尺寸]在存档页面上显示WooCommerce 3.0+产品尺寸,位于产品标题下方。

php [在存档页面上显示产品尺寸]在存档页面上显示WooCommerce 3.0+产品尺寸,位于产品标题下方。

php [在存档页面上显示产品尺寸]在存档页面上显示WooCommerce 3.0+产品尺寸,位于产品标题下方。

WooCommerce:如何在循环外显示销售产品