Mr.*_* Jo 1 php wordpress metadata orders woocommerce
我目前正在寻找一种在更新订单状态之前获取订单状态的方法。
例如,我的订单具有状态in-progress,我使用此函数以编程方式将订单状态更改为wc-completed:
$order->update_status( 'wc-completed' );
Run Code Online (Sandbox Code Playgroud)
当订单状态为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 );
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能达到这个目标?
为此,在使用 更新订单状态之前$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' );
}
}
Run Code Online (Sandbox Code Playgroud)
代码位于活动子主题(或活动主题)的 function.php 文件中。经过测试并有效。
用法- 那么现在您可以使用以下 IF 语句之一(带有订单 ID):
if( get_post_meta( $order_id, '_old_status', true ) !== 'in-progress' ) {
// Your code
}
Run Code Online (Sandbox Code Playgroud)
或者(使用订单对象):
if( $order->get_meta('_old_status') !== 'in-progress' ) {
// Your code
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2942 次 |
| 最近记录: |