在Woocommerce预订中取消付费预订后,更改订单状态即可退款

时间:2019-03-21 14:23:52

标签: php wordpress woocommerce orders woocommerce-bookings

我正在将Woocommerce与Woocommerce Booking插件一起使用,并且我希望在每次取消付费预订时将订单状态更新为可退款。

我在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');
     }
 }

欢迎任何帮助。

1 个答案:

答案 0 :(得分:0)

您未在函数中为woocommerce_booking_{ status_from }_to_{ status_to }操作钩使用正确的参数,即:

  • 预订ID:$booking_id
  • 预订对象$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