将折扣百分比添加到销售的可变产品中 [英] Adding the discount percentage to variable products on sale

查看:24
本文介绍了将折扣百分比添加到销售的可变产品中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在使用 WooCommerce 的网站中添加折扣百分比价格.

I’m trying to add a discount percentage aside price in a site that uses WooCommerce.

我已将此脚本应用于标准价格和销售价格:

I’ve applied this script for the standard price and the sale price:

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

上面的脚本有效.

在前端,我有价格百分比.

In front-end, I have the price percentage.

现在我想对产品变化价格应用相同的脚本.

Now I want apply the same script to the product variation price.

我检查了产品变体选项并尝试了以下操作:

I’ve checked the product variation option and tried something like this:

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

但它不起作用,百分比不适用于价格.

But it does not work, the percentage is not applied to the price.

前端也不行.

推荐答案

针对 WooCommerce 版本 3+ 进行了更新 |已弃用的替代品

  • 将woocommerce_variable_sale_price_html"替换为woocommerce_variable_get_price_html"
  • 将woocommerce_sale_price_html"替换为woocommerce_get_price_html"
  • 将woocommerce_price()"替换为wc_price()"
  • WC_Product 价格属性替换为 WC_Product 价格方法
  • Replaced 'woocommerce_variable_sale_price_html' by 'woocommerce_variable_get_price_html'
  • Replaced 'woocommerce_sale_price_html' by 'woocommerce_get_price_html'
  • Replaced 'woocommerce_price()' by 'wc_price()'
  • Replaced WC_Product price properties by WC_Product price methods


可变产品更复杂,因为您有 2 个不同的价格位置,第一个显示最小和最大价格(当您有多个变体时),第二个显示所选变体的价格.我对你的原始代码做了很多更改.


For variable products is more complicated as you have 2 different locations with prices, the first one displays the minimal and maximal price (when you have multiple variations) and the second one displays the price from the selected variations. I have changed a lot your original code.

这是显示折扣百分比周围的自定义动态标签的正确代码:

Here the correct code to display that custom dynamic labels arround discounted percentages:

add_filter('woocommerce_variable_get_price_html','adventure_tours_sales_price', 10, 2 );
add_filter('woocommerce_get_price_html','adventure_tours_sales_price', 10, 2 );
function adventure_tours_sales_price( $price, $product ){

    // Variables initialisation
    $regular_price = $product->get_regular_price();
    $sale_price    = $product->get_sale_price();
    $save_text     = __('Save', 'woocommerce') . ' ';

    if(!empty($sale_price)) {
        // Percentage calculation
        $percentage = '<span class="save-percent"> ' .$save_text . round( ( ( $regular_price -  $sale_price ) / $regular_price ) * 100 ) . '%</span>';

        $price = '<del class="strike">' . wc_price( $regular_price ) . '</del>
        <ins class="highlight">' . wc_price( $sale_price )  . $percentage . '</ins>';
    } else {
        $price = '<ins class="highlight">'.wc_price( $regular_price ).'</ins>';
    }
    return $price;
}

add_filter('woocommerce_variable_get_price_html', 'adventure_tours_sales_min_max_prices', 20, 2);
function adventure_tours_sales_min_max_prices( $price, $product) {

    // Variables initialisation
    $variation_min_reg_price = $product->get_variation_regular_price('min', true);
    $variation_max_reg_price = $product->get_variation_regular_price('max', true);
    $variation_min_sale_price = $product->get_variation_sale_price('min', true);
    $variation_max_sale_price = $product->get_variation_sale_price('max', true);
    $percentage_min = '';
    $percentage_max = '';
    $save_text     = __('Save', 'woocommerce') . ' ';

    // Percentage calculations
    if($variation_min_reg_price != $variation_min_sale_price)
        $percentage_min = '<span class="save-percent-min"> (' .$save_text . round( ( ( $variation_min_reg_price -  $variation_min_sale_price ) / $variation_min_reg_price ) * 100 ) . '%)</span>';
    if($variation_max_reg_price != $variation_max_sale_price)
        $percentage_max = '<span class="save-percent-max"> (' .$save_text . round( ( ( $variation_max_reg_price -  $variation_max_sale_price ) / $variation_max_reg_price ) * 100 ) . '%)</span>';

    if (($variation_min_reg_price != $variation_min_sale_price) || ($variation_max_reg_price != $variation_max_sale_price)) {
        $price = '<del class="strike">' . wc_price($variation_min_reg_price) . '-' . wc_price($variation_max_reg_price) .  '</del>
        <ins class="highlight">' . wc_price($variation_min_sale_price) . $percentage_min . ' - ' . wc_price($variation_max_sale_price) . $percentage_max . '</ins>';
    }
    return $price;
}

代码位于活动子主题(或主题)的functions.php 文件或任何插件文件中.

在 Woocommerce 版本 3+ 上测试并运行

Tested and works on Woocommerce version 3+

相关答案:

这篇关于将折扣百分比添加到销售的可变产品中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆