【问题标题】:Change order status to refund when a paid booking is cancelled in Woocommerce booking在 Woocommerce 预订中取消付费预订时将订单状态更改为退款
【发布时间】:2019-08-12 10:30:00
【问题描述】:

我正在使用带有 Woocommerce Booking 插件的 Woocommerce,我想在每次取消付费预订时更新订单状态以退款。

我在 StackOverFlow 上找到了一些答案,但仍然无法解决这个要求。

我知道我可能完全错了,但这是我最后一次尝试,显然没有成功:

add_action('woocommerce_booking_paid_to_cancelled','change_status_to_refund', 10, 2);
function change_status_to_refund($booking_id, $order_id) {
     $booking = new WC_Order($booking_id);
     $order = new WC_Order($order_id);
     $booking_status = $booking->get_status();
     if($booking_status != 'paid'){
        $order->update_status('refund', 'order_note');
     }
 }

欢迎任何帮助。

【问题讨论】:

    标签: php wordpress woocommerce orders woocommerce-bookings


    【解决方案1】:

    您没有在函数中为 woocommerce_booking_{ status_from }_to_{ status_to } 操作挂钩使用正确的参数,它们是:

    • 预订ID:$booking_id
    • 预订对象$booking

    因此,您需要在代码中从 Booking 中获取订单,以便能够更新订单状态。

    注意:条件$booking_status != 'paid' 并不是真正需要的。

    所以你的代码会更简单有效:

    add_action('woocommerce_booking_paid_to_cancelled','cancelled_booking_order_status_cahnged_to_refund', 10, 2);
    function cancelled_booking_order_status_cahnged_to_refund( $booking_id, $booking ) {$
        // Get the WC_Order object from a booking
        $order = wc_get_order( wp_get_post_parent_id( $booking_id ) );
    
        // Update order status
        if( is_a($order, 'WC_Order') )
            $order->update_status('refund');
    }
    

    代码在您的活动子主题(或活动主题)的 function.php 文件中。它应该可以工作。


    文档: Woocommerce booking developer documentation for filter and action hooks

    【讨论】:

    • 感谢您为我指明正确的方向,我以不同的方式解决了我的问题,但您的回答很有帮助
    猜你喜欢
    • 1970-01-01
    • 2017-05-24
    • 2020-09-29
    • 2018-08-30
    • 2018-01-10
    • 2020-11-03
    • 2016-08-26
    • 2019-05-18
    • 2019-07-20
    相关资源
    最近更新 更多