每XXX小时在WooCommerce中批量更新订单状态


  • 我正在尝试每 6 小时以编程方式更新一次所有订单状态。
  • "完成"后有 3 个自定义状态,每个状态每 6 小时按顺序更新一次。
  • 我创建了一个 cron 每 6 小时运行一次调用函数"auto_update_orders"。

这样做还是直接SQL查询更好?如果通过SQL查询完成,自定义状态的自动电子邮件是否仍会发送出去?

function auto_update_orders() {
$args = array(
'post_type'         => 'shop_order',
'posts_per_page'    => -1,
'post_status'       => 'complete',
);
$orderList = get_posts($args);
foreach ($orderList as $orderPost) {
$order = new WC_Order($orderPost->ID);
if ( $order->has_status( 'completed' ) ) {
$order->update_status( 'inprogress2' );
}
elseif ( $order->has_status( 'inprogress2' ) ) {
$order->update_status( 'inprogress3' );
}
elseif ( $order->has_status( 'inprogress3' ) ) {
$order->update_status( 'ready' );
}
else {
return;
}
}

我会使用更多内置的WooCommerce函数。总有一天,Woo 会将订单移动到自定义表(真的以为它已经发生了(,wc_get_orders()将保持兼容。

function auto_update_orders() {
$args = array(
'limit'  => -1,
'status' => array( 'complete', 'inprogress2', 'inprogress3 )'
);
$orderList = wc_get_orders($args);
foreach ($orderList as $order) {
if ( $order->has_status( 'completed' ) ) {
$order->update_status( 'inprogress2' );
}
elseif ( $order->has_status( 'inprogress2' ) ) {
$order->update_status( 'inprogress3' );
}
elseif ( $order->has_status( 'inprogress3' ) ) {
$order->update_status( 'ready' );
}
}
}

我整个星期都在玩动作调度程序。在这里,根据您可以期望wc_get_orders()返回的订单数量,将其分成更小的批次可能是一个不错的选择。

最新更新