#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. Проблема решена. Спасибо, Лоик!