将折扣百分比添加到已售商品中 [英] Adding the discount percentage to variable products on sale
问题描述
我正在尝试在使用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_get_price_html"替换为"woocommerce_variable_sale_price_html"
- 用"woocommerce_get_price_html"替换了"woocommerce_sale_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 byWC_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+
相关答案:
- Adding custom text labels to the prices when products are on sale
- Conditional custom output around products sale price and regular price
这篇关于将折扣百分比添加到已售商品中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!