以编程方式检查优惠券是否对 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();
    }
}

解决方法

WC_Coupon method is_valid() 自己做所有事情,因为它使用 WC_Discount 方法 is_coupon_valid() that checks if coupon is valid for the user

所以你不需要比你已经在你的代码中做的更多的东西。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...