Получить последний старый статус заказа перед обновленным статусом в Woocommerce - PullRequest
0 голосов
/ 24 января 2019

В настоящее время я ищу способ получить статус заказа перед обновленным статусом заказа.


Так, например, мой заказ имеет статус in-progress, и я изменяю статус заказа программно с помощью этой функции здесь на wc-completed:

$order->update_status( 'wc-completed' );

Когда статус заказаwc-completed У меня есть триггер, который отправляет электронное письмо.Но мне нужно сейчас проверить, был ли статус до текущего in-progress.Если это правда, мне нужно пропустить триггер:

$latest_status = get_order_status_before_current_one($order_id);
if ($latest_status !== 'in-progress') {
    // Triggers for this email.
    add_action( 'woocommerce_order_status_completed_notification', array( $this, 'trigger' ), 1, 2 );
}

Как мне этого достичь?

1 Ответ

0 голосов
/ 24 января 2019

Для этого перед обновлением статуса заказа с помощью $order->update_status( 'wc-completed' ); вам нужно будет добавить вид истории статуса для каждого события изменения статуса, используя следующую команду:

add_action( 'woocommerce_order_status_changed', 'grab_order_old_status', 10, 4 );
function grab_order_old_status( $order_id, $status_from, $status_to, $order ) {
    if ( $order->get_meta('_old_status') ) {
        // Grab order status before it's updated
        update_post_meta( $order_id, '_old_status', $status_from );
    } else {
        // Starting status in Woocommerce (empty history)
        update_post_meta( $order_id, '_old_status', 'pending' );
    }
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.


USAGE - Теперь вы можете использовать один из следующих операторов IF (с идентификатором заказа) :

if( get_post_meta( $order_id, '_old_status', true ) !== 'in-progress' ) { 
    // Your code
}

Или (с Объектом заказа) :

if( $order->get_meta('_old_status') !== 'in-progress' ) { 
    // Your code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...