自定义折扣在购物车中应用两次以分组产品 - WooCommerce

时间:2018-05-24 14:16:24

标签: php wordpress woocommerce cart discount

我使用的功能是根据用户角色将自定义价格应用于特定类别的产品。这是一个缩短的例子:

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 :(得分:0)

在评论的帮助下,发现该问题是购物车中再次调用挂钩的Product Add-on扩展程序。要解决这个问题,我所要做的就是用原始产品价格替换更改的价格。这样,即使多次调用,结果也是一样的。以下是工作示例。

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);