Woocommerce-使用购物车商品和优惠券数据验证优惠券

时间:2020-10-28 17:35:26

标签: function woocommerce cart coupon

我正在验证购物车中的优惠券,而不是整个订单。如果购物车中的物品超过可用优惠券数量限制,则优惠券会出错并向用户显示错误消息。

下面的代码检查购物篮中有多少特定商品,例如5。//可以正常工作
下面的代码还从正在使用的优惠券中返回数据。 //这不起作用

我希望返回的数据示例,以便我可以进行比较。
优惠券代码= 123
优惠券usage_count = 1
优惠券用法上限= 3
可用用法= 2

我已经有了另一个优惠券验证,可以检查用户设施预订是否在其酒店预订日期之间,效果很好。有人对我的验证有何建议吗?我似乎无法从输入的优惠券中返回数据。我是否使用正确的过滤器?谢谢

add_filter( 'woocommerce_coupon_is_valid', 'coupon_validation_quantity', 10, 2);
function coupon_validation_quantity($valid, $coupon) {

global $wpdb;
global $woocommerce;
global $product_items_in_cart;
$product_id = 493;
$product_items_in_cart = 0;

foreach ( WC()->cart->get_cart() as $cart_item ) {
    $cart_product_id = $cart_item['product_id'];
    if($cart_product_id == $product_id){
        $product_items_in_cart++;
    };
};

global $product_items_in_cart;
global $cart_coupon_code;
global $cart_coupon_count;
global $cart_coupon_limit;
global $cart_coupon_available;

$applied_coupons_code = WC()->cart->get_applied_coupons();
$coupon_in_cart = new WC_Coupon($applied_coupons_code);
$cart_coupon_code = $coupon_in_cart->get_code();
$cart_coupon_count = $coupon_in_cart->get_usage_count();
$cart_coupon_limit = $coupon_in_cart->get_usage_limit();
$cart_coupon_available = ($cart_coupon_limit - $cart_coupon_count);

print_r('products in cart -> ' . $product_items_in_cart . "\r\n"); // return correct
print_r('available -> ' . $cart_coupon_available . "\r\n"); // returns zero

if($product_items_in_cart > $cart_coupon_available){
    $valid = false;
};

return $valid;

}

优惠券错误处理

add_filter( 'woocommerce_coupon_error', 'coupon_validation_error_quantity', 10, 3);
function coupon_validation_error_quantity($err, $err_code, $coupon) {

global $wpdb;
global $woocommerce;

global $product_items_in_cart;
global $cart_coupon_available;

print_r('products in cart -> ' . $product_items_in_cart . "\r\n"); // returns correctly
print_r('available -> ' . $cart_coupon_available . "\r\n"); // returns Zero

if($product_items_in_cart > $cart_coupon_available && intval($err_code) === WC_COUPON::E_WC_COUPON_INVALID_FILTERED){
    $err = __( "Coupon $cart_coupon_code exceeds available usage. You have $cart_coupon_available available ", "woocommerce" );
};

return $err;

}

0 个答案:

没有答案