/**
* Frontend validate new customer only coupon code
* hook: woocommerce_after_checkout_validation
*/
add_action('woocommerce_after_checkout_validation','check_new_customer_coupon', 0);
function check_new_customer_coupon(){
global $woocommerce;
// you might change the firstlove to your coupon
$new_cust_coupon_code = 'firstlove';
$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;
}
}
}
도와 드리겠습니다. blog에서 얻었습니다.
왜 게시물의 모든 단어의 첫 글자를 대문자로 표시합니까? 이것은 단지 당신의 질문을 읽기가 더 어렵게 만들고, 독자들을 자극하여 하향 회선으로 만들 수 있습니다. – halfer
@halfer 나는 주제를 벗어나 명확하지 않고 너무 광범위하기 때문에 투표를 내려야 만한다. – LoicTheAztec
@Loic, thanks. 나는 그것이 OP에 교육적인 효과가있을 것이라고 생각한다면, 어쨌든 곧 닫히게 될 공개 게시물을 편집하는 것에 넓게 찬성합니다. 그러나이 경우 과도한 양의 작업으로 보람을 느낄 수 있을지 궁금해했으나 그럼에도 불구하고 잘 수행되었습니다. – halfer