-
-
Save kloon/4512943 to your computer and use it in GitHub Desktop.
<?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 . '%' ); | |
} | |
?> |
@rsangeethk No, you simply add the code to your theme's functions.php file and it will automatically add the Save x% next to prices of products that are on sale.
@kloon. Thanks a lot.
I'm trying to add a class to that percentage so i can manage the CSS. Do you have an idea to do that please?
Above works fantastically. Thanks for that.
Can you also convert the above code for
// Add save percent next to variable sale item prices?
I have following code but it gives [Warning; Divide by zero] only when the products are listed in the side bar. You can see it here http://www.silkaurora.com.au/
// Add save percent next to variable sale item prices. This is causing 'devide by zero' warning on the left hand widget area
add_filter( 'woocommerce_variable_sale_price_html', 'woocommerce_custom_variable_sales_price', 10, 2 );
function woocommerce_custom_variable_sales_price( $price, $variable ) {
$reg_price = get_post_meta( $variable->children[0], '_regular_price', true );
$sale_price = get_post_meta( $variable->children[0], '_sale_price', true );
$percentage = round( ( ( $reg_price - $sale_price ) / $reg_price ) * 100 );
return $price . sprintf( __(' Save %s', 'woocommerce' ), $percentage . '%' );
}
@ShimonGrout For the css styling, I propose this :
// 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( __('
}
@kloon i have just copy and paste the above code mention for functions.php at the bottom of my functions.php but its getting error.. Please help me how can i make the percentage on the product of sale price.
Thank in advance !!
This snippet doesnt work on the latest version..
@kloon works perfectly thanks, i'm also trying to add a css class to manage which prices display the saving.
any idea how to add the class to this snippet? many thanks!
@kloon , how can I output the total savings in the cart page. How to modify the foreach loop to calculate total savings of all products the cart and show it in the cart page, what filter/hook to use ?
This code works perfectly for single product page.
Can you please help me modifying the function to show total savings of all the products in the cart, in the cart page.
Thanks.
@oavs Did you manage this to work on variable products?
edit and delete that code from server file manager
This isn't working with the latest WooCommerce update.. please can you update page? thank for you!
not working on a variable products
Any update for woocommerce 3? thank you!
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 );
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 );
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.
Does anyone know of a code that works with variations ?
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 );`
Its not working on variable products.Please help me out.
Its Urgent!
Thanks in advance.
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!
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!!
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!
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;
}
thanks alot it helped me,do i need to add any code in theme to call the save :percentage