我通过自定义仪表板表单以编程方式将优惠券应用于订阅,因此用户无需通过标准购物车来应用它。它所做的只是将他们输入的代码输入到输入中,然后将其应用于子。
有没有一种方法可以像购物车执行大量验证一样针对用户验证优惠券(例如,如果优惠券已被使用,可以是重复使用的优惠券等)。
有没有办法挂钩该验证,而不是我手动写出所有不同的检查?这样做感觉不对,而且很可能事情会从网上溜走。
我有一些基本的检查,比如优惠券是否存在,然后是使用限制检查。
$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();
}
}
答案 0 :(得分:1)
WC_Coupon
method is_valid()
自己做所有事情,因为它使用 WC_Discount
方法 is_coupon_valid()
that checks if coupon is valid for the user。
所以你不需要比你已经在你的代码中做的更多的东西。