Come aggiungere il costo dell’Assicurazione al carrello WooCommerce

Come aggiungere Assicurazione al carrello WooCommerce

Una lettrice del nostro Blog ha chiesto come aggiungere il costo dell’Assicurazione al carrello WooCommerce. Di base, purtroppo, WooCommerce non da questa possibilità, ma per ottenere questo scopo, possiamo procedere in due modi:

  • nel primo caso possiamo aggiungere il costo direttamente a quello della spedizione, in questo caso però l’utente non potrà scegliere se vuole o meno sostenere questo costo, avrà quindi una spedizione con Assicurazione obbligatoria.
  • se vogliamo invece offrire la scelta all’utente, dovremo procedere in questo modo:
    come prima cosa dovremo creare un nuovo prodotto chiamato “Spedizione Assicurata” attribuendo a questo prodotto il costo dell’assicurazione, ad esempio, 3€.
    Annotate il codice ID del prodotto appena creato, ci servirà per lo step successivo.
    Aggiungiamo il seguente codice al file functions.php del nostro tema (usa un tema child possibilmente):
add_action('woocommerce_cart_totals_after_shipping', 'wc_shipping_insurance_note_after_cart');
function wc_shipping_insurance_note_after_cart() {
global $woocommerce;
    $product_id = xxx;
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
    $_product = $values['data'];
    if ( $_product->id == $product_id )
        $found = true;
    }
    // if product not found, add it
if ( ! $found ):
?>
    <tr class="shipping">
        <th><?php _e( 'Spedizione Assicurata', 'woocommerce' ); ?></th>
        <td><a href="<?php echo do_shortcode('[add_to_cart_url id="xxx"]'); ?>"><?php _e( 'Aggiungi spedizione assicurata (+$3)' ); ?> </a></td>
    </tr>
<?php else: ?>
    <tr class="shipping">
        <th><?php _e( 'Spedizione Assicurata', 'woocommerce' ); ?></th>
        <td>€3</td>
    </tr>
<?php endif;
}

Modifica la variabile $product_id inserendo al posto di xxx, il valore ID del prodotto che hai annotato in precedenza.

Tutto fatto, fai una prova e verifica il corretto funzionamento.

AGGIORNAMENTO 2021

Qualora abbiate lo scopo di inserire un importo addizionale fisso all\’ordine totale, chiamato per esempio \”Spedizione assicurata\”, ecco il codice da usare:

function woo_add_cart_fee() {
global $woocommerce;
$woocommerce->cart->add_fee( __('Spedizione assicurata', 'woocommerce'), 3 );
}
add_action( 'woocommerce_before_calculate_totals', 'woo_add_cart_fee' );

Alla prossima.

6 commenti su “Come aggiungere il costo dell’Assicurazione al carrello WooCommerce”

  1. Ciao,
    ho notato che nella versione mobile la scritta “Spedizione Assicurata” scompare e al suo posto escono fuori due punti (:),
    può dipendere dal tema?

    1. Ciao grazie per la tua segnalazione. Ti suggerisco di utilizzare, in alternativa al codice indicato nell’articolo, quanto segue:

      add_action( ‘woocommerce_after_cart_table’, ‘shipping_insurance_option’ );
      add_action( ‘woocommerce_checkout_after_customer_details’, ‘shipping_insurance_option’ );
      function shipping_insurance_option() {

      if ( is_admin() && ! defined( ‘DOING_AJAX’ ) )
      return;

      $product_id = xxx;
      $product_price = get_post_meta($product_id, ‘_price’, true);
      $add_to_cart_link = ‘?add-to-cart=’.$product_id;
      $add_to_cart_text = __( “Aggiungi spedizione Assicurata: +€$product_price” );
      $display_option = true;

      foreach ( WC()->cart->get_cart() as $cart_item_key => $item_values ) {
      if ( $item_values[‘data’]->id == $product_id ) {
      $display_option = false;
      break;
      }
      }
      if($display_option){
      ?>
      <br clear=”all”><p><a class=”button” href=”<?php echo $add_to_cart_link; ?>”><?php echo $add_to_cart_text; ?></a></p>
      <?php
      }
      }

  2. Ciao. Ho creato la funzione per aggiungere l’assicurazione ma nel carrello mi compare il seguente messaggio
    Undefined variable: found in /home/mgelettr/public_html/wp-content/themes/kutetheme/functions.php on line 674

    Ho controllato la linea 674 ed è quella in cui su scrive if ( ! $found ):
    Hai idea di cosa potrebbe essere sbagliato? Prima non mi dava questo problema.

    Grazie mille!

    1. Salve,
      a parte il consiglio di utilizzare un tema child, le consiglio di usare il codice riportato nei commenti avendo cura di sostituire le tre x (xxx) con l’id del prodotto citato nell’articolo:

      add_action( ‘woocommerce_after_cart_table’, ‘shipping_insurance_option’ );
      add_action( ‘woocommerce_checkout_after_customer_details’, ‘shipping_insurance_option’ );
      function shipping_insurance_option() {

      if ( is_admin() && ! defined( ‘DOING_AJAX’ ) )
      return;

      $product_id = xxx;
      $product_price = get_post_meta($product_id, ‘_price’, true);
      $add_to_cart_link = ‘?add-to-cart=’.$product_id;
      $add_to_cart_text = __( “Aggiungi spedizione Assicurata: +€$product_price” );
      $display_option = true;

      foreach ( WC()->cart->get_cart() as $cart_item_key => $item_values ) {
      if ( $item_values[‘data’]->id == $product_id ) {
      $display_option = false;
      break;
      }
      }
      if($display_option){
      ?>
      <br clear=”all”><p><a class=”button” href=”<?php echo $add_to_cart_link; ?>”><?php echo $add_to_cart_text; ?></a></p>
      <?php
      }
      }

      1. scusate ma credo ci debba essere un errore nel codice del commento in quanto risulta roncato e quindi compare un errore lla fine quando lo si lancia

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Torna in alto