Я программно применяю купон к подписке через настраиваемую форму панели инструментов, чтобы пользователь не проходил через стандартную корзину, чтобы применить его. Все, что он делает, это берет код, который они ввели, на вход, а затем применяет его к сабвуферу.
Есть ли способ проверить купон на пользователя таким же образом, как корзина выполняет тонну проверки (например, если купон был использован, может быть повторяющимся купоном и т. д. и т. д.).
Есть ли способ подключиться к этой проверке вместо того, чтобы вручную выписывать все различные проверки? Делать это таким образом кажется неправильным, и, вероятно, что-то ускользнет из сети.
У меня есть несколько основных проверок, например, если купон существует, а затем проверка лимита использования.
$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();
}
}