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 . '%' );
}
The script above works.
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.
Nor in front-end.
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:
Code goes in function.php file of your active child theme (or theme) or also in any plugin file.
Tested and works on Woocommerce version 2.6.x (also works for version 3+ replacing hooks).
Here is what you are going to get (Screenshots from my raw test server):
Related answers: