Woocommerce — проверка купона с элементами корзины и данными купона

#function #woocommerce #cart #coupon

#функция #woocommerce #Корзина #купон

Вопрос:

Я нахожусь в процессе проверки купона на элементы корзины, а не на заказ в целом. Если количество товаров в корзине превышает количество доступных купонов, купон выдает ошибку и выдает пользователю сообщение об ошибке.

Приведенный ниже код проверяет, сколько конкретных товарных позиций находится в корзине, например 5. // Это работает
Приведенный ниже код также возвращает данные из используемого купона. // Это не работает

Пример данных, которые я хочу вернуть, чтобы я мог сравнить.
код купона = 123
количество использований купона = 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 . "rn"); // return correct
print_r('available -> ' . $cart_coupon_available . "rn"); // 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 . "rn"); // returns correctly
print_r('available -> ' . $cart_coupon_available . "rn"); // returns Zero

if($product_items_in_cart > $cart_coupon_available amp;amp; 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;

}
  

Комментарии:

1. Проблема в вашем коде заключается в том, что WC()->cart->get_applied_coupons() к корзине применяется МАССИВ кодов купонов , но не строка уникального кода купона .

2. Проблема решена. Спасибо, Лоик!