1

我正在使用带有 Woocommerce 预订插件的 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');
     }
 }

欢迎任何帮助。

4

1 回答 1

0

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

  • 预订编号:$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 预订开发人员文档

于 2019-03-21T15:01:25.897 回答