从额外的自定义折扣率百分比更新购物车中的价格

Update the price in cart from additional custom discount rate percentage

提问人:xRay 提问时间:10/24/2023 最后编辑:LoicTheAztecxRay 更新时间:10/24/2023 访问量:52

问:

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

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 价格 折扣

评论

0赞 LoicTheAztec 10/24/2023
只需从 if 语句中删除,即可使其在任何地方都有效。&& is_product($product->get_id())

答:

0赞 ArtisticPhoenix 10/24/2023 #1

像这样的东西:

$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())

评论

0赞 xRay 10/24/2023
另一个答案返回了正常价格。您的回答将返回销售价格。我的代码工作正常,因为我在产品页面上看到了价格。但是,我已经删除了整个逻辑并使用了.产品页面显示价格为 15,但是,我仍然无法在购物车中看到 15。return 15;
0赞 ArtisticPhoenix 10/24/2023
我可能应该使用.在我做完我的之后,我没有看到那个告诉。我想这取决于你想要的输入是什么。get_regular_price
0赞 xRay 10/24/2023
然后我得到正常价格,但仍然没有 15。
1赞 ArtisticPhoenix 10/24/2023
我猜在结帐时这是行不通的get_field("zusatzlicher_rabatt", 'options')['rabatt_status']
1赞 xRay 10/24/2023
我发现问题是因为.移除它时,它工作正常。愚蠢的错误,但无论如何,感谢您的帮助!&& is_product($product->get_id())