我正在验证购物车中的优惠券,而不是整个订单。如果购物车中的物品超过可用优惠券数量限制,则优惠券会出错并向用户显示错误消息。
下面的代码检查购物篮中有多少特定商品,例如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;
}