Skip to main content
WooCommerce

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

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 . '';
}

Leave a Reply