woocommerce_before_calculate_totals挂钩无法正常工作

时间:2016-05-23 14:03:52

标签: wordpress woocommerce

我正在使用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 );
        } 

}

}

请帮忙

1 个答案:

答案 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 );