All’interno di un sistema eCommerce progettato con WooCommerce normalmente viene mostrato, per i prodotti scontati, il “badge” “in offerta”. Alcuni temi per WordPress ottimizzati per WooCommerce, offrono l’opzione di sostituire il “badge”, mostrando al posto della scritta la percentuale di sconto. Se il tema utilizzato non prevede questa opzione, possiamo risolvere il problema della visualizzazione dinamica della percentuale di sconto, senza l’utilizzo di un plugin.

add_filter( 'woocommerce_sale_flash', 'add_percentage_to_sale_badge', 20, 3 );
function add_percentage_to_sale_badge( $html, $post, $product ) {
if( $product->is_type('variable')){
$percentages = array();
$prices = $product->get_variation_prices();
foreach( $prices['price'] as $key => $price ){
if( $prices['regular_price'][$key] !== $price ){
$percentages[] = round( 100 - ( floatval($prices['sale_price'][$key]) / floatval($prices['regular_price'][$key]) * 100 ) );
}
}
$percentage = max($percentages) . '%';
} elseif( $product->is_type('grouped') ){
$percentages = array();
$children_ids = $product->get_children();
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 ( $sale_price != 0 || ! empty($sale_price) ) {
$percentages[] = round(100 - ($sale_price / $regular_price * 100));
}
}
$percentage = max($percentages) . '%';
} else {
$regular_price = (float) $product->get_regular_price();
$sale_price = (float) $product->get_sale_price();
if ( $sale_price != 0 || ! empty($sale_price) ) {
$percentage = round(100 - ($sale_price / $regular_price * 100)) . '%';
} else {
return $html;
}
//personalizza la scritta che compare prima della percentuale di sconto, in questo caso compare solo il segno "-"
}
return '<span class="onsale">' . esc_html__( '-', 'woocommerce' ) . ' ' . $percentage . '</span>';
}







