提问人:xRay 提问时间:10/24/2023 最后编辑:LoicTheAztecxRay 更新时间:10/24/2023 访问量:52
从额外的自定义折扣率百分比更新购物车中的价格
Update the price in cart from additional custom discount rate percentage
问:
我想更改产品价格。这是我尝试过的:
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
答:
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())
评论
&& is_product($product->get_id())