【问题标题】:Change order total after checkout in Woocommerce在 Woocommerce 中结帐后更改订单总额
【发布时间】:2018-02-28 18:46:46
【问题描述】:

在用户单击结帐后,我似乎无法找到要使用哪个挂钩来更改总数(或购物车的任何变量)。例如,用户提交结帐表格,然后我需要做一些检查并相应地更改总数。

我应该怎么做,我用哪个钩子?

【问题讨论】:

    标签: php wordpress woocommerce hook-woocommerce orders


    【解决方案1】:

    这可以在 woocommerce_checkout_create_order 动作钩子中完成,您必须在 WC_Abstract_Order 和 WC_Order 类中使用 CRUD getter 和 setter 方法...

    由于购物车对象和购物车会话尚未销毁,您仍然可以使用WC()->cart 对象和WC_Cart 方法来获取数据……

    这个钩子在订单数据以$order->save(); 保存到数据库之前触发。你可以看到in the source code HERE。

    下面是一个假的工作示例:

    add_action( 'woocommerce_checkout_create_order', 'change_total_on_checking', 20, 1 );
    function change_total_on_checking( $order ) {
        // Get order total
        $total = $order->get_total();
    
        ## -- Make your checking and calculations -- ##
        $new_total = $total * 1.12; // <== Fake calculation
    
        // Set the new calculated total
        $order->set_total( $new_total );
    }
    

    代码进入活动子主题(或主题)的 function.php 文件中。

    经过测试并且有效。

    这里有一些解释:Add extra meta for orders in Woocommerce

    【讨论】:

    • 谢谢你,我花了很多时间搜索,但找不到这个特殊的钩子。
    • 很抱歉再次打扰您,但是如何在同一过程中设置小计和产品价格? WC_Abstract_Order 中没有像 set_subtotal() 这样的设置器。
    • @Shile 用于更复杂的订单小计,因为它是根据订单项计算的金额......所以您最好提出一个新问题,使用您尝试过的最少代码和一些有关什么的相关详细信息您想做什么以及您正在检查的内容……对于您应该查看的订单项WC_Checkout create_order_line_items() method source code
    猜你喜欢
    • 2021-05-28
    • 2020-11-23
    • 2021-01-30
    • 2012-12-04
    • 1970-01-01
    • 2021-03-09
    • 2020-10-10
    • 2019-01-21
    • 1970-01-01
    相关资源
    最近更新 更多