我认为用户可以在五分钟内更改订单状态。所以我用hook编写了下面的代码-
add_action( \'woocommerce_order_status_failed\', \'the_dramatist_woocommerce_auto_delete_order\' );
add_action( \'woocommerce_order_status_pending\', \'the_dramatist_woocommerce_auto_delete_order\' );
add_action( \'woocommerce_order_status_cancelled\', \'the_dramatist_woocommerce_auto_delete_order\' );
function the_dramatist_woocommerce_auto_delete_order( $order_id ) {
// 5*60 = 300 seconds. Here 1minute = 60 seconds.
wp_schedule_single_event(tim() + 300, \'the_dramatist_main_delete_event\', $order_id);
}
function the_dramatist_main_delete_event( $order_id ) {
global $woocommerce;
$order = new WC_Order( $order_id );
$order_status = $order->get_status();
if ( !$order_id )
return false;
if (\'cancelled\' == $order_status || \'failed\' == $order_status || \'pending\' == $order_status ) {
wp_delete_post($order_id,true);
return true;
}
return false;
}
在这里,我们通过钩子检测订单状态的变化,并在从睡眠中醒来后再次检查订单状态。因此,如果用户在五分钟内用更改订单状态,则不会发生删除。请测试一下。我没有测试过。希望对你有帮助。
P、 我想是美国sleep()
函数将导致WordPress生命周期延迟。所以我们最好使用wp_schedule_single_event
作用所以我更新了我的代码。