【问题标题】:woocommerce_after_calculate_totals not working to update cart item pricewoocommerce_after_calculate_totals 无法更新购物车商品价格
【发布时间】:2020-08-27 14:05:33
【问题描述】:

我想要实现的是,如果用户在购物车中添加了特定产品,它的价格应该变为零

这是我用来更新购物车商品价格的简单代码 sn-p,但是

add_action('woocommerce_before_calculate_totals','set_bonus_product_pice');
function set_bonus_product_pice($cart_object){
     if ( is_admin() && ! defined( 'DOING_AJAX' ) )
            return;

       $free_product_ID = 10;
       foreach ( $cart_object->cart_contents as $key=>$cart_item) { 
           if($cart_item['product_id'] == $free_product_ID){
                 $cart_item['data']->set_price(0);
                 break;
           }
        }
 }

Woocommerce 版本是 4.3

在上面的代码中,如果条件也设置价格被正确调用并且调用设置价格在产品对象的更改键下设置新价格,则在进一步调试时它工作正常,直到在 class-wc-cart.php 中调用 wc_get_price_ exclude_tax 方法文件,一些 wc_get_price_ exclude_tax 方法如何从产品对象中删除更改。

我还尝试了它的各种变体,而不是使用 $cart_object 直接我使用了 $woocommerce->get_cart()。 相同的解决方案以前对我有用,但不确定是否是由于最新版本的 woocommerce 发生了一些变化

【问题讨论】:

  • 你的产品类型简单吗?
  • 是的,它是一个具有虚拟类型的简单产品,没有应用税类或任何其他选项,我也已经尝试过 $value['data']->price = $custom_price;这曾经在 3.2 之前适用于 woocommerce
  • 检查我下面的答案。

标签: php wordpress woocommerce


【解决方案1】:

更改 $cart_item['data']->set_price(0);到 $value['data']->price = $custom_price;

检查下面的代码。

add_action( 'woocommerce_before_calculate_totals', 'set_bonus_product_pice', 20, 1 );
function set_bonus_product_pice( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $custom_price    = 10; // This will be your custome price  
    $free_product_ID = 10;
    
    foreach ( $cart_object->get_cart() as $item ) {
        if ( $item['product_id'] == $free_product_ID ) {
            $item['data']->set_price( $custom_price );
        }
    }
}

【讨论】:

  • 这将不起作用,因为 woocoomerce 3.2 他们已将产品价格设为私有财产,因此您无法直接设置它。我忘了在我的问题中说明我也已经尝试过了
  • 检查我的编辑并参考了这个答案stackoverflow.com/questions/43324605/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
相关资源
最近更新 更多