我使用的功能是根据用户角色将自定义价格应用于特定类别的产品。这是一个缩短的例子:
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来显示/隐藏分组产品的子产品,这些产品基于其附加选择。附加组件不应用任何成本更改。
为什么这种情况发生在购物车中?
答案 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);