首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >woocommerce_before_calculate_totals钩子不能正常工作

woocommerce_before_calculate_totals钩子不能正常工作
EN

Stack Overflow用户
提问于 2016-05-23 14:03:51
回答 1查看 2K关注 0票数 3

我使用woocommerce_before_calculate_totals在woocommerce增加额外的价格。如果您在购物车中添加了一个产品并选择了价格,那么总价格在结帐时是正确的,但是如果客户在相同的过程中创建了他的帐户并进行了结账,那么在完成付款后,这个价格会增加两次。这是我的密码

代码语言:javascript
复制
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 );
        } 

}

}

请帮帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-23 15:56:05

如果客户在结帐时选择Create Account选项,woocommerce将第二次调用calculate_totals() (在注册客户帐户并自动记录它们之后),以便重新计算购物车总数,以显示注册前不可用的任何基于角色的折扣。

因此,您可以做的是检查"reload_checkout"会话,该会话将在第二次调用calculate_totals()之前设置。

所以像这样更新你的calculate_gift_wrap_fee

代码语言:javascript
复制
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 );
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37393175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档