我在Wordpress Woocommerce中遇到问题,我根据他们需要的条件以编程方式更新产品价格。下面是一个简单的例子。我有它显示,然后添加到购物车就好了。我的问题是,当用户退出并重新登录时,购物车最终会返回产品的全价。要么我不正确地更新价格,要么有更好的方法来确保购物车具有正确的折扣价格。
这是我在functions.php
中的内容 add_action('woocommerce_get_price_html','pricechanger');
function pricechanger($price){
$theid = get_the_ID();
$product = wc_get_product($theid);
$price = $product->price;
$price = //do something to the price here
//save the productid/price in session for cart
$_SESSION['pd']['$theid'] = $price;
add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10, 2);
add_action( 'init', 'woocommerce_add_to_cart_action', 10);
add_action( 'init', 'woocommerce_checkout_action', 10 );
return $price;
}
由于价格不会转换为添加到购物车按钮,因此我必须将它们保存在会话中。我还没有找到任何可以将价格发送到购物车的地方。
add_action( 'woocommerce_before_calculate_totals', 'woo_add_discount');
function woo_add_discount() {
if(isset($_SESSION['pd'])) {
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
foreach($_SESSION['pd'] as $key => $val) {
if($cart_item['data']->id == $key){
$cart_item['data']->set_price($val);
}
}
}
}
}
非常感谢帮助! 谢谢!
答案 0 :(得分:1)
我忘了在这里发表我的结论答案。
您需要针对价格变动代码运行这些挂钩:
add_action( 'woocommerce_before_calculate_totals', 'your_function_here');
add_action( 'woocommerce_before_mini_cart', 'your_function_here');
function your_function_here(){
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
//do something to your price here
$price = 'some calculation here';
//set your price
$cart_item['data']->price = floatval($price);
}
}
希望能帮助别人!