Aggiungi prodotto omaggio con codice sconto

Con questo codice, è possibile automatizzare l’aggiunta di un prodotto omaggio specifico al carrello quando i clienti inseriscono un determinato codice sconto. Per personalizzare il codice è sufficiente inserire l’ID del prodotto omaggio e il nome del codice sconto nei punti indicati.

PHP
/*
* Snippet Name:     Aggiungi prodotto omaggio con codice sconto.
* Snippet Author:   Matteo De Maria
* Version:          3.0.0
*/

// 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.

Lascia un commento

I commenti non pertinenti allo snippet o offensivi non verranno approvati.

Se desideri condividere del codice, per favore fallo in questo modo: [php]il tuo codice[/php].

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

DMM WEB DESIGN
Questo sito utilizza cookie tecnici e di profilazione. Cliccando su accetta si autorizzano tutti i cookie di profilazione. Cliccando su rifiuta o la X si rifiutano tutti i cookie di profilazione. Cliccando su personalizza è possibile selezionare quali cookie di profilazione attivare.