// Aggiunge il prodotto omaggio al carrello quando viene applicato un coupon
function dmm_action_woocommerce_applied_coupon($coupon_code) {
// Impostazioni
$product_id = 88; // Inserisci l'ID del prodotto omaggio
$quantity = 1;
$free_price = 0;
$coupon_codes = array('nome_coupon'); // Inserisci il nome del coupon
// Confronta
if (in_array($coupon_code, $coupon_codes, true)) {
// Aggiungi il prodotto al carrello
WC()->cart->add_to_cart($product_id, $quantity, 0, array(), array('free_price' => $free_price));
}
}
add_action('woocommerce_applied_coupon', 'dmm_action_woocommerce_applied_coupon', 10, 1);
// Imposta il prezzo gratuito dai dati personalizzati dell'elemento nel carrello
function dmm_action_woocommerce_before_calculate_totals($cart) {
if (is_admin() && !defined('DOING_AJAX')) {
return;
}
if (did_action('woocommerce_before_calculate_totals') >= 2) {
return;
}
// Scorre i contenuti del carrello
foreach ($cart->get_cart_contents() as $cart_item) {
if (isset($cart_item['free_price'])) {
$cart_item['data']->set_price($cart_item['free_price']);
}
}
}
add_action('woocommerce_before_calculate_totals', 'dmm_action_woocommerce_before_calculate_totals', 10, 1);
// Rimuove il prodotto omaggio dal carrello quando viene rimosso il coupon corrispondente
function dmm_action_woocommerce_removed_coupon($coupon_code) {
// Impostazioni
$product_id = 88; // Inserisci l'ID del prodotto omaggio
$coupon_codes = array('nome_coupon'); // Inserisci il nome del coupon
// Confronta
if (in_array($coupon_code, $coupon_codes, true)) {
// Scorre i contenuti del carrello
foreach (WC()->cart->get_cart_contents() as $cart_item_key => $cart_item) {
// Quando il prodotto è nel carrello
if ($cart_item['product_id'] === $product_id) {
// Rimuove l'elemento dal carrello
WC()->cart->remove_cart_item($cart_item_key);
break;
}
}
}
}
add_action('woocommerce_removed_coupon', 'dmm_action_woocommerce_removed_coupon', 10, 1);
// Limita la quantità del prodotto omaggio in base al coupon applicato
add_filter('woocommerce_quantity_input_args', 'dmm_limit_free_product_quantity_in_cart', 10, 2);
function dmm_limit_free_product_quantity_in_cart($args, $product) {
// Imposta l'ID del prodotto omaggio
$free_product_id = 88; // Inserisci l'ID del prodotto omaggio
// Imposta il nome del coupon che aggiunge il prodotto omaggio
$coupon_code = 'nome_coupon'; // Inserisci il nome del coupon
// Verifica se il prodotto nel carrello è il prodotto omaggio e se il coupon è applicato
if ($product->get_id() === $free_product_id && WC()->cart->applied_coupons && in_array($coupon_code, WC()->cart->applied_coupons, true)) {
$args['min_value'] = 1;
$args['max_value'] = 1; // Limita la quantità a 1
$args['step'] = 1;
}
return $args;
}
// Modifica il prezzo in "Omaggio" nei prodotti gratuiti nel carrello
add_filter('woocommerce_cart_item_price', 'dmm_dmmwebdesign_price_free_zero_cart', 9999, 3);
function dmm_dmmwebdesign_price_free_zero_cart($price, $cart_item, $cart_item_key) {
$product = $cart_item['data'];
// Verifica se il prezzo è zero
if (0 == $product->get_price()) {
$price = 'OMAGGIO';
}
return $price;
}
// Modifica la quantità del prodotto omaggio a "Omaggio" durante il checkout
add_filter('woocommerce_checkout_cart_item_quantity', 'dmm_dmmwebdesign_price_free_zero_checkout', 9999, 3);
function dmm_dmmwebdesign_price_free_zero_checkout($quantity, $cart_item, $cart_item_key) {
$product = $cart_item['data'];
// Verifica se il prezzo è zero
if (0 == $product->get_price()) {
$quantity .= ' - OMAGGIO';
}
return $quantity;
}
// Svuota il carrello se contiene solo il prodotto omaggio
function dmm_empty_cart_if_only_free_product() {
// Imposta l'ID del prodotto omaggio
$free_product_id = 88; // Inserisci l'ID del prodotto omaggio
// Verifica se il carrello è vuoto o contiene solo il prodotto omaggio
if (WC()->cart->is_empty() || (count(WC()->cart->get_cart()) === 1 && reset(WC()->cart->get_cart())['product_id'] == $free_product_id && reset(WC()->cart->get_cart())['data']->get_price() == 0)) {
WC()->cart->empty_cart();
}
}
add_action('woocommerce_before_cart', 'dmm_empty_cart_if_only_free_product');
Copia il codice nel file functions.php del tuo tema child attivo o utilizza il plugin Code Snippets.