Программно проверьте, действителен ли купон для пользователя в WooCommerce

Я программно применяю купон к подписке через настраиваемую форму панели инструментов, чтобы пользователь не проходил через стандартную корзину, чтобы применить его. Все, что он делает, это берет код, который они ввели, на вход, а затем применяет его к сабвуферу.

Есть ли способ проверить купон на пользователя таким же образом, как корзина выполняет тонну проверки (например, если купон был использован, может быть повторяющимся купоном и т. д. и т. д.).

Есть ли способ подключиться к этой проверке вместо того, чтобы вручную выписывать все различные проверки? Делать это таким образом кажется неправильным, и, вероятно, что-то ускользнет из сети.

У меня есть несколько основных проверок, например, если купон существует, а затем проверка лимита использования.

$subscription = new WC_Subscription( $_REQUEST['sub_id'] );
$coupon_code = $_REQUEST['voucher_code'];
$coupon = new WC_Coupon( $coupon_code );
if ($coupon->is_valid()) {

    $coupon_type = $coupon->get_discount_type();
    $coupon_amount = $coupon->get_amount();
    $total = $subscription->get_total();

    if($coupon->get_usage_count() < $coupon->get_usage_limit() || $coupon->get_usage_limit() == ""){
        $strcode = strtolower($coupon_code);
        foreach ( $coupons as $coupon ) {
            if($coupon->get_code() == $strcode){
                $subscription->remove_coupon( $coupon->get_code() );
            }
        }
        $subscription->apply_coupon( $coupon_code );
        $note = "Coupon " . $coupon_code . " has been applied to subscription";
        $subscription->add_order_note( $note );
        $subscription->calculate_totals();
    }
}

person Rob    schedule 19.02.2021    source источник


Ответы (1)


WC_Coupon метод is_valid() делает все сам, так как использует WC_Discount метод is_coupon_valid(), который проверяет, действителен ли купон для пользователя.

Так что вам не нужно ничего больше, чем вы уже сделали в своем коде.

person LoicTheAztec    schedule 19.02.2021