Vai al contenuto
Home 01 Clienti 02 Chi siamo 03 Blog 04 Contatti 05
ITENHR
Home / Sostituire il badge “in offerta” con la percentuale di sconto
WooCommerce

Sostituire il badge “in offerta” con la percentuale di sconto

4 Maggio 2022
sostituire il badge in offerta con la percentuale di sconto

All’interno di un sistema e-commerce 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 la prevede, possiamo risolvere il problema senza l’utilizzo di un plugin, per visualizzazione dinamicamente la percentuale di sconto applicata.

Per sostituire il badge “in offerta” con la percentuale di sconto, inseriamo all’interno del file functions.php del tema il codice seguente:

/** sostituisci il badge "in offerta" con la percentuale di sconto */
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 '' . esc_html__( '-', 'woocommerce' ) . ' ' . $percentage . '';
}