Сначала необходимо установить для купона параметр «Лимит использования на пользователя» 1 (и сохранить) , например:
Теперь следующий пересмотренный код будет автоматически применять определенный купон только один раз, когда общая сумма расходов клиента достигла определенной суммы:
add_action( 'woocommerce_before_calculate_totals', 'enable_customer_loyalty_discount', 10, 1 );
function enable_customer_loyalty_discount( $cart ) {
if ( ( is_admin() && ! defined( 'DOING_AJAX' ) ) || ! is_user_logged_in() )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
//Your settings below
$coupon_code = 'loyaltydiscount';
$coupon_code = 'summer';
$total_spent = 30;
if( ! in_array( $coupon_code, $cart->get_applied_coupons() ) ) {
$user_id = get_current_user_id(); // User ID
// Get the WC_Customer instance Object
$customer = New WC_Customer( $user_id );
$email = $customer->get_billing_email(); // Billing email
// If the user total spent has not reached the define amount, we exit
if( $customer->get_total_spent() < $total_spent ) {
return;
}
// Get the WC_Coupon instance Object
$coupon = New WC_Coupon( $coupon_code );
// If the coupon has already been used by the customer, we exit
if( array_intersect( array($user_id, $email), $coupon->get_used_by() ) {
return;
}
$cart->apply_coupon( $coupon_code );
}
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.