is_on_sale() ) { return; } $text = get_theme_mod( 'sale_badge_text', esc_html__( 'Sale!', 'botiga' ) ); $enable_perc = get_theme_mod( 'sale_badge_percent', 0 ); $perc_text = get_theme_mod( 'sale_percentage_text', '-{value}%' ); if ( !$enable_perc ) { $badge = '' . esc_html( $text ) . ''; } else { $sale_data = botiga_get_product_sale_data( $product ); $sale_percentage = ! empty( $sale_data['percentage'] ) ? $sale_data['percentage'] : ''; $perc_text = str_replace( '{value}', $sale_percentage, $perc_text ); $badge = '' . esc_html( $perc_text ) . ''; } return $badge; } add_filter( 'woocommerce_sale_flash', 'botiga_sale_badge', 10, 3 ); /** * Get the sale data. * * @param WC_Product $product The product object. * @param array $label The label data. * * @return array */ function botiga_get_product_sale_data( $product ) { $sale_data = array(); if ( $product->is_type( 'variable' ) ) { $regular_price = (float) $product->get_variation_regular_price( 'min' ); $sale_price = (float) $product->get_variation_sale_price( 'min' ); if ( 0 !== $sale_price || ! empty( $sale_price ) ) { $sale_data['amount'] = $regular_price - $sale_price; $sale_data['percentage'] = $regular_price ? round( 100 - ( $sale_price / $regular_price * 100 ) ) : 0; } } elseif ( $product->is_type( 'grouped' ) ) { $children_ids = $product->get_children(); $total_regular_price = 0; $total_sale_price = 0; foreach ( $children_ids as $child_id ) { $child_product = wc_get_product( $child_id ); $regular_price = (float) $child_product->get_regular_price(); $sale_price = (float) $child_product->get_sale_price(); if ( $child_product->is_type( 'variable' ) ) { $regular_price = (float) $child_product->get_variation_regular_price( 'min' ); $sale_price = (float) $child_product->get_variation_sale_price( 'min' ); } $total_regular_price += $regular_price; $total_sale_price += ! empty( $sale_price ) ? $sale_price : $regular_price; } if ( 0 !== $total_sale_price || ! empty( $total_sale_price ) ) { $sale_data['amount'] = $total_regular_price - $total_sale_price; $sale_data['percentage'] = $total_regular_price ? round( 100 - ( ( $total_sale_price / $total_regular_price ) * 100 ) ) : 0; } } else { $regular_price = (float) $product->get_regular_price(); $sale_price = (float) $product->get_sale_price(); if ( 0 !== $sale_price || ! empty( $sale_price ) ) { $sale_data['amount'] = $regular_price - $sale_price; $sale_data['percentage'] = $regular_price ? round( 100 - ( ( $sale_price / $regular_price ) * 100 ) ) : 0; } } /** * Filter the product sale data. * * @param array $sale_data The sale data. * @param WC_Product $product The product object. * * @since 2.2.15 */ return apply_filters( 'botiga_product_sale_data', $sale_data, $product ); }