通过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 );
...
}
答案 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应该会处理它。