在Woocommerce中更新状态之前获取最新的旧订单状态

时间:2019-01-24 13:30:48

标签: php wordpress woocommerce metadata orders

我目前正在寻找一种在更新订单状态之前获取订单状态的方法。


例如,我的订单状态为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 :(得分:2)

为此,在使用$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文件中。经过测试,可以正常工作。


用法-现在,您可以使用以下IF语句之一(具有订单ID)

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

(带有订单对象)

if( $order->get_meta('_old_status') !== 'in-progress' ) { 
    // Your code
}