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.