Woocommerce更新价格不会保存在购物车会话中

时间:2016-06-24 21:05:21

标签: php wordpress woocommerce cart price

我在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);
        }
       }
     }
    } 

}

非常感谢帮助! 谢谢!

1 个答案:

答案 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);

    }

}

希望能帮助别人!