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

Php 在Woocommerce中设置购物车项目价格后重新计算总计,php,wordpress,woocommerce,cart,hook-woocommerce,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,

通过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 );
  ...
}

这需要在特定的专用挂钩函数中完成,而不是在
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驱动的


遇到此问题,在以编程方式更新购物车中的现有项目后,购物车项目的行合计和购物车合计未更新。未运行计算总计之前的
woocommerce\u
,因此无法完全解决这些情况下的问题

在我的例子中,因为这是在服务器端更新的,而不是通过WooCommerce表单更新的,所以我的假设是,
WooCommerce\u-before\u-calculate\u-totals
hook没有自动运行

非常简单,您可以明确地告诉WooCommerce重新计算:

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

因此,如果您在计算总计之前有一个
woocommerce\u钩子,则应在此之后调用它,否则woocommerce应该处理它,因为它很好。

您应该先阅读问题。他已经说过他使用set_price()方法设置商品价格。现在他需要重新计算购物车的总数。