Статус статуса бронирования woocommerce изменяет статус заказа woocommerce

99
8

Я использую бронирование в woocommerce.
Я пытаюсь вернуть статус заказа woocommerce, если статус woocommerce_booking отменен. Я пробовал этот код, но он не работает.


global $woocommerce;
$order = new WC_Order( $order_id );
if ( 'cancelled' == $order->status ) {
$order->update_status('refund', 'order_note');
}

спросил(а) 2017-01-09T20:31:00+03:00 3 года, 9 месяцев назад
1
Решение
109

Чтобы обновить статус заказа при статусе отмены


add_action('woocommerce_cancelled_order','change_status_to_refund', 10, 1);
function change_status_to_refund($order_id) {
$order = new WC_Order( $order_id );
$order->update_status('refund', 'order_note');
exit;
}

Надеюсь, это поможет вам. Спасибо:)

ответил(а) 2017-10-12T14:26:00+03:00 3 года назад
59

add_action( 'woocommerce_order_status_changed', 'wc_order_status_changed', 99, 3 );

function wc_order_status_changed( $order_id, $old_status, $new_status ){
if( $new_status == "cancelled" || $new_status == "refunded" ) {
//code here.
}
}

Если вы хотите использовать в некоторых действиях класса, должно быть так:


add_action( 'woocommerce_order_status_changed', array($this, 'wc_order_status_changed'), 99, 3 );

ответил(а) 2018-06-06T05:52:00+03:00 2 года, 4 месяца назад
42

add_action('woocommerce_order_status_pool-payment-rec', 'auto_change_booking_status_to_paid', 20, 2 );

function auto_change_booking_status_to_paid( $order_id, $order ) {

if( $order->get_status() === 'pool-payment-rec' ) {
foreach( $order->get_items() as $item_id => $item ) {
$product = wc_get_product($item['product_id']);
if( $product->get_type() === 'booking' ) {
$booking_ids = WC_Booking_Data_Store::get_booking_ids_from_order_item_id( $item_id );

foreach( $booking_ids as $booking_id ) {
$booking = new WC_Booking($booking_id);

if( $booking->get_status() != 'paid' )
$booking->update_status( 'paid', 'order_note' );
}

}
}
}
}

ты должен попробовать это.

ответил(а) 2019-04-18T12:41:00+03:00 1 год, 6 месяцев назад
41

Ваш код хорош, но я хотел бы знать, на каком хуке/событии вы выполняете это действие.

Например, на странице получения заказа на странице администратора, где вы получите $ order_id для реализации вашего действия с кодом.

ответил(а) 2019-04-18T12:35:00+03:00 1 год, 6 месяцев назад
41

Эй, вы можете попробовать этот крюк!


https://therichpost.com/change-product-order-status-woocommerce-hook

Надеюсь, это поможет вам

ответил(а) 2018-02-23T09:50:00+03:00 2 года, 8 месяцев назад
40

Я знаю, что это старый пост, но я только что сделал это на моей последней версии wordpress/woocommerce install


add_action('woocommerce_booking_cancelled', 'my_booking_cancelled_handler', 10, 1);
function my_booking_cancelled_handler ( $booking_id ) {
$booking = new WC_Booking( $booking_id );
$order_id = $booking->get_order_id();
// check order for your business logic
// refund or not ;-) it up to you
}

Я надеюсь, что это поможет кому-то.

ответил(а) 2018-01-27T15:13:00+03:00 2 года, 8 месяцев назад
41

Вам нужно получить статус вашего заказа, а затем проверить требуемое условие и соответствующим образом обновить его.


$order_status = $order->get_status();

ответил(а) 2017-09-27T14:04:00+03:00 3 года назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема