我正在使用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');
}
}
欢迎任何帮助。
您没有在功能中使用正确的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');
}
代码在您的活动子主题(或活动主题)的功能上启用函数。它应该有效。
文档: WooCommerce预订过滤器和操作钩的开发人员文档