Skip to content

Instantly share code, notes, and snippets.

@kloon
Last active September 8, 2021 17:45
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save kloon/4512943 to your computer and use it in GitHub Desktop.
Save kloon/4512943 to your computer and use it in GitHub Desktop.
WooCommerce add "Save x%" next to sale prices
<?php
// 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 . '%' );
}
?>
@giroin
Copy link

giroin commented Apr 25, 2017

Any update for woocommerce 3? thank you!

@AntoT84
Copy link

AntoT84 commented May 26, 2017

Try this:

function woocommerce_saved_sales_price( $price, $product ) {
$saved = wc_price( $product->regular_price - $product->sale_price );
return $price . sprintf( __('Saved %s', 'woocommerce' ), $saved );
}
add_filter( 'woocommerce_get_price_html', 'woocommerce_saved_sales_price', 10, 2 );

@giroin
Copy link

giroin commented Jun 3, 2017

For those who want a percentage just try this

function woocommerce_saved_sales_price( $price, $product ) {
$percentage = round( ( ( $product->regular_price - $product->sale_price ) / $product->regular_price ) * 100 );
return $price . sprintf( __('-%s', 'woocommerce' ), $percentage . '%' );
}
add_filter( 'woocommerce_get_price_html', 'woocommerce_saved_sales_price', 10, 2 );

@ketanzluck
Copy link

Hi giroin,

I have used following your code to show total percentage discount on Product page and categories page:

function woocommerce_saved_sales_price( $price, $product ) {
$percentage = round( ( ( $product->regular_price - $product->sale_price ) / $product->regular_price ) * 100 );
return $price . sprintf( __('-%s', 'woocommerce' ), $percentage . '%' );
}
add_filter( 'woocommerce_get_price_html', 'woocommerce_saved_sales_price', 10, 2 );

It's work good. But This code also show Total percentage off on without Sale Products . See this screen shot -> http://nimb.ws/y4xk5X So please provide me solutions for how to hide this on without sale price.

I am waiting for your replay.

Thanks,
Ketan.

@bladex21
Copy link

bladex21 commented Jun 19, 2017

Does anyone know of a code that works with variations ?

@matthewdean89
Copy link

try this:

`function woocommerce_saved_sales_price( $price, $product ) {
$percentage = round( ( ( $product->regular_price - $product->sale_price ) / $product->regular_price ) * 100 );
if ($percentage == "100") {
return $price . sprintf();
} else {
return $price . sprintf( __('-%s', 'woocommerce' ), $percentage . '%' );
}
}

add_filter( 'woocommerce_get_price_html', 'woocommerce_saved_sales_price', 10, 2 );`

@MuhammedRaza
Copy link

Its not working on variable products.Please help me out.
Its Urgent!
Thanks in advance.

@zdvdla
Copy link

zdvdla commented Sep 4, 2017

the code above does not work with WC 3.1.2....
It doesn't throw any errors, simply does nothing....
I'll work on it but was thinking I couldn't possibly be the only one facing this...
any help would be great!
I'll see what I can come up with in the meantime.
Thanks!

@zdvdla
Copy link

zdvdla commented Sep 4, 2017

found a solution here-
https://stackoverflow.com/questions/43757920/display-the-discounted-percentage-near-sale-price-in-single-product-pages-for-wc

answered May 3 at 22:46
LoicTheAztec

Thank you Loic !!
I looked for 2 hours and you saved me e few more I am certain!!

@pasog
Copy link

pasog commented May 21, 2018

is it possible to do this even for different prices, variable products? !!
image

@lacnunga
Copy link

This code apparently doesn't work in my instance of WooCommerce Version 5.6.0, although it's been copied into the functions.php of the Storefront theme as is. Any suggestions for troubleshooting would be appreciated!

@vandanojan
Copy link

Your snippet only works on simple products. For variable products, instead, give the following code a try:

// For Variable Products Discount
add_filter( 'woocommerce_available_variation', 'custom_variation_price_saving_percentage', 10, 3 );
function custom_variation_price_saving_percentage( $data, $product, $variation ) {
$active_price = $data['display_price'];
$regular_price = $data['display_regular_price'];

if( $active_price !== $regular_price ) {
$saving_percentage = round( 100 - ( $active_price / $regular_price * 100 ), 1 ) . '%';
$data['price_html'] .= sprintf( __('You Saved: %s', 'woocommerce' ), $saving_percentage );
}
return $data;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment