我需要以编程方式动态更改购物车中商品的价格。
我尝试过 Woocommerce 操作挂钩、购物车和会话对象的不同组合,但似乎没有任何效果。我认为这不会那么具有挑战性。
add_action( 'woocommerce_before_calculate_totals', 'change_cart_item_price' );
function change_cart_item_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
if( 123 == $value['data']->id ) {
$new_price = function_to_get_new_price( $value, get_current_user_id( ) );
$value['data']->price = $new_price;
}
}
}
上面的代码仅在结账页面或更新购物车时更改每件商品的价格(即:从购物车中删除商品时调用钩子),但不是无限期的。
我正在使用 Woocommerce Gravity Forms 插件。我特别有一种产品,特定用户将多次订购该产品。用户将被允许 5 次免费,只需支付运费,以上每 5 次将收取 20 美元。我使用动态填充字段的重力形式挂钩进行了如此多的编码和功能。运输特定于重力形式内的字段,因此我将计算留给重力形式。
我的问题是,如果用户减少订单中该产品的数量(从购物车中删除其中一件商品),则应重新计算购物车中同一产品的每件商品的价格,否则可能会结束-带电(曾经是第六名的商品现在是第四名,但价格保持不变,这是不应该的)
所以,每次从购物车中删除某些商品时,我想根据该特定产品的数量重新计算购物车中每件商品的价格。
- - 编辑 - -
上面的代码有效,但我意识到问题一定是我用来显示价格的自定义循环......
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$_product = $cart_item['data'];
if( 123 == $_product->post->ID ) {
$price_not_updated = $cart_item['data']->price;
}
}