Sales banner for On Sale items
-
I’m trying to make a custom banner that would indicate the maximum savings to customers for a particular variable product. I have put the relevant code in an action hook in my child theme’s function.php but it’s exhibiting very weird behaviour. The sales banner is showing up on a few products and won’t show up at all on a few others. You can see the issue here.
The code I’m using in the action hook function is as below:
add_action('woocommerce_sale_flash', 'woo_sales_percent', 10, 3); function woo_sales_percent($sale_tag, $post, $product) { $sale_tag = ''; $sale_discount = 0; if ($product->has_child()) { //Calculating discount on variable products foreach ($product->get_children(false) as $child_id) { $regprice = get_post_meta( $child_id, '_regular_price', true); //regular price $saleprice = get_post_meta( $child_id, '_sale_price', true); //current price if ($product -> get_child($child_id) -> is_on_sale()) { $child_discount = round ((1 - ($saleprice / $regprice)) * 100); $sale_discount = $child_discount > $sale_discount ? $child_discount : $sale_discount; } } } else { //Calculating discount on simple products $regprice = get_post_meta( $product->id, '_regular_price', true); //regular price $saleprice = get_post_meta( $product->id, '_sale_price', true); //current price if ($product -> is_on_sale()) { $product_discount = round ((1 - ($saleprice / $regprice)) * 100); $sale_discount = $product_discount > $sale_discount ? $product_discount : $sale_discount; } } if ($sale_discount > 0) { $sale_tag = '<span class="onsale">Upto ' . $sale_discount . '% off</span>'; } return $sale_tag; }
I have enabled the shop to display out of stock items as well since the business wants to provide a pre-order catalog for out of stock items. Backorders, however, are currently disabled. I don’t know if this information is relevant but I thought better share the same.
I have also meticulously compared a product with the banner showing with one that isn’t showing a banner and for the life of me couldn’t understand why one would have the banner while the other won’t. I tried disabling all the variations in the product without the banner and then enabled them one by one. The banner appeared for arbitrary combinations of enabled/disabled variations but I failed to find a pattern so far. I am still trying to run through a few more combos but it would be great if someone could take a look at my function code for something obvious that I may be missing.
Thanks a lot for looking at this.
- The topic ‘Sales banner for On Sale items’ is closed to new replies.