Пользовательская скидка применяется дважды в корзине к сгруппированному продукту - WooCommerce - PullRequest
0 голосов
/ 24 мая 2018

Я использую функцию для применения индивидуальной цены к продуктам в определенной категории в зависимости от роли пользователя.Вот сокращенный пример:

function return_custom_discounted_price($price, $product) {

$current_user = wp_get_current_user();
$newPrice = $price;
$prodID = $product->get_id();

     if( in_array('example_customer', $current_user->roles) && !is_admin()){

            if(has_term( 'example-category', 'product_cat', $prodID )){
                $newPrice = $price * .9;
            }

     }
     return $newPrice;
}
add_filter('woocommerce_product_get_price', 'return_custom_discounted_price', 10, 2);

Однако, если товар этой категории добавляется из сгруппированного товара, скидка в корзине применяется дважды.Например, если товар стоил $ 100, корзина применяется:

(100 * .9) * .9 = 81 

, когда оно должно быть просто

100 * .9 = 90

Что странно, потому что код работает нормально, если вы добавляете тот же товар с помощьюсам, а не из сгруппированного продукта.

Я также использую расширение Product Addons WooCommerce для этих сгруппированных продуктов.Я использую jQuery, чтобы показать / скрыть дочерние продукты сгруппированной базы продуктов от их выбора дополнения.Надстройка не применяет никаких изменений стоимости.

Почему это происходит в корзине?

1 Ответ

0 голосов
/ 24 мая 2018

С некоторой помощью комментариев была обнаружена проблема с расширением надстройки продукта, вновь вызывающим ловушку в корзине.Чтобы это исправить, все, что мне нужно было сделать, это заменить измененную цену первоначальной ценой продукта.Таким образом, даже если вызывается несколько раз, результат будет одинаковым.Ниже приведен рабочий пример.

function return_custom_discounted_price($price, $product) {

$current_user = wp_get_current_user();
$newPrice = $price;
$prodID = $product->get_id();
$originalPrice = $product->get_regular_price();

     if( in_array('example_customer', $current_user->roles) && !is_admin()){

            if(has_term( 'example-category', 'product_cat', $prodID )){
                $newPrice = $originalPrice * .9;
            }

     }
     return $newPrice;
}
add_filter('woocommerce_product_get_price', 'return_custom_discounted_price', 999, 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...