我正在使用woocommerce_before_calculate_totals在woocommerce中增加额外价格。如果您在购物车中添加产品并选择价格,则结账时总价格是正确的,但如果客户在同一过程中创建其帐户并结帐,则在程序付款后将价格添加两次。这是我的代码
function calculate_gift_wrap_fee( $cart_object ) {
$additionalPrice = 100;
foreach ( $cart_object->cart_contents as $key => $value ) {
if( isset( $value["gift_wrap_fee"] ) ) {
$orgPrice = floatval( $value['data']->price );
$value['data']->price = ( $orgPrice + $additionalPrice );
}
}
}
请帮忙
答案 0 :(得分:1)
如果客户在结帐时选择Create Account
选项,则woocommerce第二次调用calculate_totals()
(在客户帐户注册并自动记录之后),以重新计算购物车总数以显示任何基于角色的折扣注册前无法使用。
所以你可以做的是检查"reload_checkout"
会话,这个会话将在第二次调用calculate_totals()
之前设置。
因此,请更新您的calculate_gift_wrap_fee
function calculate_gift_wrap_fee( $cart_object ) {
if( !WC()->session->__isset( "reload_checkout" )) {
/* Gift wrap price */
$additionalPrice = 100;
foreach ( $cart_object->cart_contents as $key => $value ) {
if( isset( $value["gift_wrap_fee"] ) ) {
$orgPrice = floatval( $value['data']->price );
$value['data']->price = ( $orgPrice + $additionalPrice );
}
}
}
}
add_action( 'woocommerce_before_calculate_totals', 'calculate_gift_wrap_fee', 99 );