Как программно применить купон в Woocommerce для первого заказа, сделанного клиентом?

В Woocommerce я пытаюсь найти способ применить скидку 20% на первый заказ, сделанный новым клиентом.
Похоже, что я могу использовать функции woocommerce_after_checkout_validation а также check_new_customer_coupon сделать это, но это не работает.

function.php:

add_action('woocommerce_after_checkout_validation','check_new_customer_coupon', 0);

function check_new_customer_coupon(){
global $woocommerce;
// you might change the name of your coupon
$new_cust_coupon_code = 'test';

$has_apply_coupon = false;

foreach ( WC()->cart->get_coupons() as $code => $coupon ) {
if($code == $new_cust_coupon_code) {
$has_apply_coupon = true;
}
}

if($has_apply_coupon) {

if(is_user_logged_in()) {
$user_id = get_current_user_id();

// retrieve all orders
$customer_orders = get_posts( array(
'meta_key'    => '_customer_user',
'meta_value'  => $user_id,
'post_type'   => 'shop_order',
'numberposts'=> -1
) );

if(count($customer_orders) > 0) {
$has_ordered = false;

$statuses = array('wc-failed', 'wc-cancelled', 'wc-refunded');

// loop thru orders, if the order is not falled into failed, cancelled or refund then it consider valid
foreach($customer_orders as $tmp_order) {

$order = wc_get_order($tmp_order->ID);
if(!in_array($order->get_status(), $statuses)) {
$has_ordered = true;
}
}

// if this customer already ordered, we remove the coupon
if($has_ordered == true) {
WC()->cart->remove_coupon( $new_cust_coupon_code );
wc_add_notice( sprintf( "Coupon code: %s is only applicable for new customer." , $new_cust_coupon_code), 'error' );
return false;
}
} else {
// customer has no order, so valid to use this coupon
return true;
}

} else {
// new user is valid
return true;
}
}

}

0

Решение

Может быть, вы можете сделать обходной путь, разместив что-то вроде этого на сайте:

С купоном XXXXXX получите скидку 20% на ваш первый командир

https://docs.woothemes.com/document/coupon-management/

а в управлении купонами вы ставите ограничение 1 на пользователя?

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector