Я использую плагин подписок WooCommerce в WooCommerce. Я пытаюсь написать функцию для предоставления 10% скидки на обычные продукты, когда выполняется одно из следующих условий:
- У пользователя активная подписка
- У пользователя в корзине есть продукт по подписке.
function vip_discount() {
$woocommerce = WC();
$items = $woocommerce->cart->get_cart();
$vip_product_id = get_subscription_product_id();
$is_vip_in_cart = is_in_cart($vip_product_id);
$vip_product_price = 0;
foreach ($items as $item) {
if( $item['variation_id'] === get_subscription_variation_id('monthly') || $item['variation_id'] === get_subscription_variation_id('quarterly') || $item['variation_id'] === get_subscription_variation_id('annually') ) {
$vip_product_price = $item['line_total'];
}
}
if ( wcs_user_has_subscription( '', '', 'active' ) || $is_vip_in_cart ) {
// Make sure that the calculation is a negative number at the end ALWAYS!
$discount = -( 10 / 100 ) * ( $woocommerce->cart->get_displayed_subtotal() - $vip_product_price);
print_r($discount);
$woocommerce->cart->add_fee( 'VIP Discount', $discount );
}
}
add_action( 'woocommerce_cart_calculate_fees', 'vip_discount' );
Проблема в том, что этот хук почему-то запускается дважды. Также не применяется правильная плата. Предполагается, что сумма повторяющихся элементов будет вычтена из отрицательно примененной комиссии, вместо этого комиссия будет равна стоимости самой подписки (повторяющейся).
Любая дополнительная информация или помощь приветствуются.