根据其他自定义折扣率百分比更新购物车中的价格

问题描述 投票:0回答:1

我想更改产品价格。这是我尝试过的:

function regular_price_func($price, $product) {     
    if (!empty(get_field("zusatzlicher_rabatt", 'options')['rabatt_status']) && is_product($product->get_id())) {   
        $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);

这会改变产品页面上的价格,但是当将该商品添加到购物车时,购物车页面仍然显示官方价格,所以我的功能没有效果。

为了实现我的目标,我尝试过这样的方法:

function custom_change_product_price($cart_object) {
    foreach ($cart_object->get_cart() as $cart_item_key => $cart_item) {
        $new_price = 100; 
        $cart_item['data']->set_price($new_price);
    }
}
add_action('woocommerce_before_calculate_totals', 'custom_change_product_price');

这会将价格更改为 100。但是,我想要的是我在函数

regular_price_func
中定义的价格。我该怎么做?

php wordpress woocommerce price discount
1个回答
0
投票

类似这样的:

$cart_item['data']
应该是 WC_Product 类的实例。

function custom_change_product_price($cart_object) {
    foreach ($cart_object->get_cart() as $cart_item_key => $cart_item) {
        /*@var \WC_Product $Product*/
        $Product = $cart_item['data'];
        $Product->set_price(
            regular_price_func(
                $Product->get_regular_price(),
                $Product
            )
        ); 
    }
}

我看到另一个答案在我发布此后被删除,基本上是相同的(可能有点混乱)。我不是一个窃取信用的人,所以当你说“这不起作用”时。您应该确保您的定价逻辑正确运行。其中有一些条件和一些需要设置的自定义选项。那里更有可能存在其他问题。如果这些条件均不满足,则只会退回产品原价。这并不意味着上面的代码或其他答案有任何问题。

 I want the price, which I have defined in the function regular_price_func.

您没有要求我们验证该函数的逻辑,这是不可能的,有些东西(数据)我们不必这样做。

我投票取消删除其他答案,这是我能做的最多的事情。

我可以添加的最后一件事,如果你输入提示(我将对象大写):

function regular_price_func($price, \WC_Product $Product) { 

你不必检查

is_product($Product->get_id())
,因为它别无选择,只能成为一个产品。

© www.soinside.com 2019 - 2024. All rights reserved.