在Woocommerce中设置购物车价格后重新计算总数

时间:2018-08-14 17:11:51

标签: php wordpress woocommerce cart hook-woocommerce

通过set_price()方法更改产品价格后,如何更改小计价格?现在,它可以在review-order.php中以旧价格计算总成本。

cart.php

foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
  ...
  $_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
  $product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key );
  ...
  $_product->set_price( $price );
  ...
}

2 个答案:

答案 0 :(得分:0)

这需要在特定的专用挂钩函数中完成,而不要使用cart.php模板:

add_action( 'woocommerce_before_calculate_totals', 'changing_cart_item_prices', 20, 1 );
function changing_cart_item_prices( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
        // The instance of the WC_Product Object
        $product = $cart_item['data'];
        $product_id = $product->get_id(); // The product ID

        $price = $product->get_price(); // The product price

        $new_price = 50;

        // Set the new cart item price
        $product->set_price( $new_price );
    }
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试和工作。

  

由于该钩子是由ajax驱动的,因此一切都会正确更新

答案 1 :(得分:0)

遇到此问题,其中以编程方式更新购物车中的现有项目后,cart_item的line_total和购物车总计未更新。 woocommerce_before_calculate_totals没有运行,因此在这些情况下不能完全解决问题。

在我的情况下,由于此更新是在服务器端进行的,而不是通过WooCommerce表单进行的更新,因此我假设woocommerce_before_calculate_totals挂钩未自动运行。

很容易,您可以明确地告诉WooCommerce重新计算:

WC()->cart->calculate_totals();

因此,如果您有一个woocommerce_before_calculate_totals钩子,则应在此之后调用它,否则WooCommerce应该会处理它。