Aggiungere tassa (fee) al carrello WooCommerce

In quest’articolo voglio spiegarvi, nella maniera più semplice possibile,come integrare all’interno del carrello in Woocommerce, una tassa fissa (fee) aggiuntiva al totale ordine.

A volte ci troviamo davanti alla necessità di aggiungere una tassa (fee) aggiuntiva al totale del carrello, come nel caso dei 2€ di Marca da Bollo al superamento dei 77,47€ sul totale del carrello.
Fortunatamente con gli Hook di Woocommerce, fare questa integrazione è abbastanza semplice, ed in quest’articolo voglio spiegarvi come fare.

Woocommerce nativamente, ha integrata una funzione che incorpora l’aggiunta di commissioni. Tutto ciò che bisogna fare è creare la funzione giusta che si agganci e crei la commissione richiesta, in questo modo Woocommerce mostrerà in automatico la commissione sul carrello e sul totale del checkout.

Per ovvi motivi è importante sapere che il totale carrello non può essere negativo.

L’unico hook di cui devi preoccuparti è woocommerce_cart_calculate_fees.
All’interno di questo hook è possibile ottenere l’oggetto carrello chiamando WC () -> cart.
Con questa funzione puoi chiamare add_fee (), che accetta quattro parametri; add_fee ($ fee_name (nome del fee), $ amount_in_float (totale maggiorazione fee), $ taxable_boolean (se la tassa aggiuntiva è tassabile o no), $ tax_class_string (per definire una tassa fiscale, se il terzo parametro è attivo).

A prescindere dalla scelta che fate, vi ricordo che l’Hook o stringa deve essere aggiunta sul function.php del tema di WordPress, per questo motivo deve essere attivo i l tema child in modo da non perdere queste integrazioni in caso di aggiornamenti.

Aggiungere una Tassa (Fee)

Con questo hook andremmo ad aggiungere una Tassa Fissa (Fee) al totale del carrello, impedendo allo stesso tempo l’aggiunta di commissioni o integrazioni iva.
È importante sapere che il valore della tassa aggiunto sarà espresso nella valuta in cui è impostato il tuo negozio.

[php gutter=”true” title=”Aggiungere una Commissione (Fee)”] add_action(‘woocommerce_cart_calculate_fees’, function() {
if (is_admin() && !defined(‘DOING_AJAX’)) {
return;
}
WC()->cart->add_fee(__(‘Marca da bollo’, ‘txtdomain’), 2);
});[/php]

Nella riga 5, la voce “Marca da Bollo” può essere sostituita a nostro piacimento con una parola che identifichi la tassa.
Sempre sulla riga 5 si andrà a definire il valore della tassa aggiuntiva

Aggiungere una Tassa in base al totale del carrello

Supponiamo tu voglia aggiungere una tassa aggiuntiva se il tuo carrello supera una certa cifra (come ad esempio 2€ di marca da bollo al superamento dei 77.47€). Potresti farlo in questo modo:

[php gutter=”true” title=”Aggiungere una Commissione in base al totale del carrello”] add_action(‘woocommerce_cart_calculate_fees’, function() {
if (is_admin() && !defined(‘DOING_AJAX’)) {
return;
}

$cart_total = WC()->cart->get_cart_contents_total(); // Questo esclude la spedizione
if ($cart_total < 72) { // Ammontare totale carrello
WC()->cart->add_fee(__(‘Marca da bollo’, ‘txtdomain’), 2);
}
});[/php]

Usa WC () -> cart-> get_cart_contents_total () per ottenere il totale del carrello, esclusa la spedizione.
(Se desideri includere anche la spedizione, guarda sotto nell’aggiunta della commissione percentuale su come ottenere i totali di spedizione).

Puoi anche capovolgerlo e decidere di aggiungere una commissione se il prezzo è inferiore ad una certa cifra.

Aggiungere una Tassa in percentuale al totale carrello

Se invece vuoi che la commissione sia in percentuale al totale del carrello, devi procedere con un calcolo diverso.
Ricorda che è sempre importante dare accesso al carrello da cui recuperare i totali WC () -> cart .

[php gutter=”true” title=”Aggiungere una Commissione in percentuale al totale carrello”] add_action(‘woocommerce_cart_calculate_fees’, function() {
if (is_admin() && !defined(‘DOING_AJAX’)) {
return;
}

$percentage = 0.05; // Percentage (5%) in float
$percentage_fee = (WC()->cart->get_cart_contents_total() + WC()->cart->get_shipping_total()) * $percentage;

WC()->cart->add_fee(__(‘Marca da bollo’, ‘txtdomain’), $percentage_fee);
});[/php]

Il codice sopra aggiungerà una commissione che ammonta al 5% del totale del carrello (get_cart_contents_total ()), più il costo di spedizione del carrello (get_shipping_total ()). Regola la tariffa e i totali da includere o escludere in ciò di cui hai bisogno.

Aggiungere una Tassa in base al luogo di spedizione

Puoi anche aggiungere una commissione (fee) a seconda del luogo di spedizione. Possiamo usare WC () -> cliente per l’oggetto cliente.
Tieni presente che se il cliente non è loggato o non ha ancora inserito l’indirizzo, i valori dell’oggetto cliente saranno vuoti o rimarranno le impostazioni base definite.

[php gutter=”true” title=”Aggiungere una Commissione in base al luogo di spedizione”] add_action(‘woocommerce_cart_calculate_fees’, function() {
if (is_admin() && !defined(‘DOING_AJAX’)) {
return;
}

$shipping_country = WC()->customer->get_shipping_country();
if ($shipping_country == ‘NO’) {
WC()->cart->add_fee(__(‘Spedizione gratuita dall’Italia’, ‘txtdomain’), 50);
}
});[/php]

Aggiungere una Tassa in base al metodo di spedizione

Ottenere la tassa aggiuntiva in base al metodo di spedizione è più complesso.
Puoi ottenere il metodo di spedizione scelto con WC () -> session-> get (‘selected_shipping_methods’). Notare che si basa su “metodi” e non “metodo”, quindi restituisce un array.
Normalmente l’array contiene un elemento, dove ogni elemento è costituito da stringhe di ID di spedizione, due punti e un ID dopo di esso.
Consiglio di utilizzare “metodi “per verificare se la stringa contiene l’ID, ad esempio strpos (), e non se è uguale.

[php gutter=”true” title=”Aggiungere una Commissione in base al metodo di spedizione”] add_action(‘woocommerce_cart_calculate_fees’, function() {
if (is_admin() && !defined(‘DOING_AJAX’)) {
return;
}

$chosen_shipping_method = WC()->session->get(‘chosen_shipping_methods’);

if (strpos($chosen_shipping_method[0], ‘flat_rate’) !== false) {
WC()->cart->add_fee(__(‘Tassa per spedizione forfettaria’, ‘txtdomain’), 50);
}
});[/php]

Aggiungere una Tassa in base al metodo di pagamento

Se si desidera aggiungere una commissione a seconda del metodo di pagamento scelto, è possibile ottenerlo grazie a WC () -> session-> get (‘selected_payment_method’) e fare un confronto con il suo nome (ad esempio per Paypal restituirebbe “paypal”).

Tuttavia, potresti notare che quando il cliente passa da un pagamento all’altro durante il checkout, la commissione non viene aggiunta o rimossa dinamicamente. Quindi dovrai aggiungere alcuni JavaScript aggiuntivi per assicurarti che WooCommerce aggiorni il carrello in modo che la tua tariffa funzioni in modo coerente.

[php gutter=”true” title=”Aggiungere una Commissione in base al metodo di pagamento”] add_action(‘woocommerce_cart_calculate_fees’, function() {
if (is_admin() && !defined(‘DOING_AJAX’)) {
return;
}

$chosen_payment_method = WC()->session->get(‘chosen_payment_method’);
if ($chosen_payment_method == ‘paypal’) {
WC()->cart->add_fee(__(‘Paypal Fee’, ‘txtdomain’), 50);
}
});

add_action(‘woocommerce_review_order_before_payment’, function() {
?><script type="text/javascript">
(function($){
$(‘form.checkout’).on(‘change’, ‘input[name^="payment_method"]’, function() {
$(‘body’).trigger(‘update_checkout’);
});
})(jQuery);
</script><!–?php
});[/php]

Per aggiungere Javascript, ci colleghiamo a woocommerce_review_order_before_payment che si verifica subito prima della casella di pagamento in checkout e output script inline. Bisogna poi attivare l’hook update_checkout di WooCommerce ogni volta che viene modificata la scelta del metodo di pagamento. Ciò garantisce che tutti i metodi e gli hook PHP necessari vengano eseguiti (incluso l’hook a pagamento) ogni volta che il carrello viene aggiornato.

Aggiungere una Tassa a seconda dei prodotti nel carrello

L’uso di WC () -> cart-> get_cart_contents () restituisce sempre un array di tutti i prodotti nel carrello. Puoi il tutto attraverso questo passaggio:


[php gutter="true" title="Aggiungere di una Commissione a seconda dei prodotti nel carrello"]
    $products_in_cart = WC()->cart->get_cart_contents();
    $product_ids_in_cart = array_column(array_values($products_in_cart), 'product_id');
    // Now you can use e.g. in_array() to check for certain product IDs.
[/php]

L’esempio seguente mostra come aggiungere una commissione a seconda che il carrello contenga un prodotto di un determinato ID:


[php gutter="true" title="Aggiungere di una Commissione a seconda dei prodotti nel carrello"]
    add_action('woocommerce_cart_calculate_fees', function() {
    	if (is_admin() && !defined('DOING_AJAX')) {
    		return;
    	}
     
    	$really_expensive_product_id = 12;  // product ID that triggers a fee
     
    	$products_in_cart = WC()->cart->get_cart_contents();
    	$product_ids_in_cart = array_column(array_values($products_in_cart), 'product_id');
    	if (in_array($really_expensive_product_id, $product_ids_in_cart)) {
    		WC()->cart->add_fee(__('Fee for really expensive product', 'txtdomain'), 50);
    	}
    });
[/php]

Puoi anche utilizzare operazioni simili per estrarre quantità se devi aggiungere una commissione quando un cliente aggiunge una quantità molto grande di un prodotto.

In conclusione

In questo articolo ho cercato ti mostrarvi come aggiungere una tariffa personalizzata attraverso diversi metodi.
Nella speranza possano esservi utili accetto consiglio di miglioramento o integrazioni.
Potrebbero interessarti anche: