如何让WooCommerce购物车价格同步自定义折扣函数计算的价格?
解决WooCommerce购物车价格同步产品页自定义折扣价格的问题
你已通过regular_price_func实现产品页自定义折扣价格,但购物车页面未同步该价格。现有购物车价格修改代码仅能设置固定值,可通过以下方式让购物车调用自定义函数计算价格:
修改购物车价格计算函数
直接在购物车价格修改逻辑中调用已有的regular_price_func,传递正确的产品对象和基准价格:
function custom_change_product_price($cart_object) { foreach ($cart_object->get_cart() as $cart_item_key => $cart_item) { $product = $cart_item['data']; // 调用自定义折扣函数计算新价格 $original_price = $product->get_price(); $new_price = regular_price_func($original_price, $product); $cart_item['data']->set_price($new_price); } } add_action('woocommerce_before_calculate_totals', 'custom_change_product_price');
关键调整说明
原regular_price_func中的is_product($product->get_id())判断在购物车场景下会失效——因为购物车页面并非产品页,is_product()返回false,导致折扣逻辑不触发。需要修改该函数的条件判断:
function regular_price_func($price, $product) { // 去掉页面判断,仅检查折扣开关状态 if (!empty(get_field("zusatzlicher_rabatt", 'options')['rabatt_status'])) { $discount_in_procent = (($product->get_regular_price() - $product->get_sale_price()) / $product->get_regular_price()) * 100; if ($discount_in_procent > 49) { return ($product->get_regular_price() - ($product->get_regular_price() / 100) * ($discount_in_procent + get_field("zusatzlicher_rabatt", 'options')['produkte_uber_50'])); } else { return ($product->get_regular_price() - ($product->get_regular_price() / 100) * ($discount_in_procent + get_field("zusatzlicher_rabatt", 'options')['produkte_unter_50'])); } } return $price; } add_filter('woocommerce_product_get_price', 'regular_price_func', 10, 2);
这样调整后,产品页和购物车页都会使用相同的折扣逻辑计算价格,确保价格同步。
内容的提问来源于stack exchange,提问作者xRay
相关产品推荐
相关产品推荐

