You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 18:53:11