Creare un coupon con credito sfruttando il codice promozionale in woocommerce

Pubblicato da: Roberto Commenti: 0

In questo articolo tratteremo di come un codice promozionale con woocommerce con la funzione di credito. Il buono avrà un valore, che man mano un utente acquista, questo valore scende sottoforma di credito.

In primis bisogna creare tramite la sezione di woocommerce, esattamente in Marketing/Codici Promozionali, un coupon impostandolo su “sconto fisso sul carrello“, ed inserendo ZERO nel “Importo del codice promozionale“.

Bene, una volta creato il coupon possiamo inserire questa funzione nel file functions del nostro tema. Nell’esempio di questo snippet abbiamo impostato un valore di 25 euro, che man mano che l’utente lo utilizzerà scenderà di valore. Il nome del codice promozionale lo abbiamo chiamato “tester”. Quindi potete poi modificare lo snippet a vostro piacimento sostituendo sia il nome del coupon e sia il valore.

Sostanzialmente lo snippet controlla, in fase di acquisto, se l’utente ha gia utilizzato questo codice promozionale durante gli ordini, e man mano calcola il residuo rimanente. Ovviamente se andrete a cancellare gli ordini, il credito ritornerà nuovamente disponibile. Quindi è ottimo quando effettuate promozioni di marketing e volete incentivare le vendite offrendo un coupon a valore.

 

/** * @snippet Esempio Coupon Virtuale "tester" con credito da 25 euro*/</pre>
add_action( 'woocommerce_before_calculate_totals', 'one_virtual_coupon_with_credits', 10, 1 );
function one_virtual_coupon_with_credits ($cart) {

if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;

$customer_orders = get_posts( array(
'numberposts' => -1,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),//utente corrente mentre naviga
'post_type' => 'shop_order',
'post_status' => array('wc-pending','wc-processing', 'wc-completed', 'wc-on-hold'),

) );
$count = 0;
$total = 0;

if (!empty($customer_orders)) {
foreach ($customer_orders as $customer_order){

$order = wc_get_order($customer_order->ID);
$items = $order->get_items('coupon');

foreach ( $items as $item ) {

if( $item['code'] == 'tester' ) {
$total += $order->get_discount_total();
}

}
}
}
//nome del codice promozionale creato in woocommerce/codici promozionali
$coupon_fixed = 'tester';//ricorda di impostare in woocommerce il codice promozionale a zero euro, opzione sconto fisso sul carrello(fixed_cart).

//limite del credito
$limit = 25;

//Se il totale negli ordini precedenti per questo utente superano i 25 euro
if( $total >= $limit && $cart->has_discount( $coupon_fixed ) ) {
// Se presente il codice coupon tester rimvuovilo in automatico
if( $cart->has_discount( $coupon_fixed ) )
$cart->remove_coupon( $coupon_fixed );

// E visualizza il messaggio che si è superato il limite di 25 euro
$message = __( "Hai superato il limite di euro $limit per il coupon tester", "woocommerce" );
wc_add_notice( $message, 'error' );

}
//Se il totale negli ordini precedenti per questo utente NON superano i 25 euro
if( $total < $limit && $cart->has_discount( $coupon_fixed ) ) {
// Se il coupon viene inserito, calcola la differenza
if( $cart->has_discount( $coupon_fixed ) )
$total_discount = $limit - $total;//promemoria - verrà inserito nel filtro

}
}

function filter_one_virtual_coupon_with_credits($discount, $discounting_amount, $cart_item, $single, $coupon){

// Ricontrolla il totale negli ordini precedenti
$customer_orders = get_posts( array(
'numberposts' => -1,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),//utente corrente mentre naviga
'post_type' => 'shop_order',
'post_status' => array('wc-pending','wc-processing', 'wc-completed', 'wc-on-hold'),

) );
$count = 0;
$total = 0;

if (!empty($customer_orders)) {
foreach ($customer_orders as $customer_order){

$order = wc_get_order($customer_order->ID);
$items = $order->get_items('coupon');

foreach ( $items as $item ) {

if( $item['code'] == 'tester' ) {
$total += $order->get_discount_total();
}

}
}
}

//limite del credito
$limit = 25;

if ($coupon->code == 'tester'){
//calcola l'ammontare nel carrello e checkout della somma da scontare
$discount = $limit - $total ;
return $discount;
}
else {
return $discount;
}
}
add_filter('woocommerce_coupon_get_discount_amount', 'filter_one_virtual_coupon_with_credits', 10, 5);

Lascia un commento

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