我想更改产品价格。这是我尝试过的:
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
中定义的价格。我该怎么做?
类似这样的:
$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())
,因为它别无选择,只能成为一个产品。