在Woocommerce中的特定时间和日期内自动更改订单状态



我希望在正常工作时间(周一至周五上午8点至下午4点(将订单状态从处理更改为完成。

我有以下代码,它可以工作,但经常停止工作

date_default_timezone_set('Europe/London');
$is_week_days  = in_array( date('w'), array( 1, 2, 3, 4 ) ) ? true : false; // From Monday to Thursday
$is_friday     = date('w') == 5 ? true : false; // Friday
$is_week_end   = in_array( date('w'), array( 0, 6 ) ) ? true : false; // Weekend days
$start_time    = mktime('08', '00', '00', date('m'), date('d'), date('Y')); // 8am
$end_time      = mktime('16', '00', '00', date('m'), date('d'), date('Y')); // 4pm
$now_time      = time();
$after_tomorow = date('l', strtotime('+2 days'));
if (($is_week_days || $is_friday) && ($now_time >= $start_time && ($now_time < $end_time))) {
$working_hours = 1;
} else {
$working_hours = 0;
}
if ($working_hours == 1  && $status != "completed") {
$order->update_status( 'completed' );
return;
} else {
return;
} 

这是一个更大功能的一部分,该功能在下单后触发。

有没有一种更简单的方法可以通过functions.php实现这一点?

谢谢!

正如Dave S所评论的Where does this code run now?,正如我所看到的,您的代码看起来不错,但它可以改进得更好,所以我对您的代码进行了一点修改。

首先,您在相同的条件下添加了$is_week_days$is_friday,因此您只需将第5天添加到$is_week_days天即可查看周五。

在这种情况下,您添加了额外的圆形胸罩($now_time < $end_time)

并且,您可以在工作日条件下查看此$status != "completed"案例。

$is_week_days  = in_array( date('w'), array( 1, 2, 3, 4, 5 ) ) ? true : false; // From Monday to Friday
$start_time    = mktime( '08', '00', '00', date('m'), date('d'), date('Y') ); // 8am
$end_time      = mktime( '16', '00', '00', date('m'), date('d'), date('Y') ); // 4pm
$now_time      = time();
if ( $is_week_days && ( $now_time >= $start_time && $now_time <= $end_time ) && $status != "completed" ) {
$order->update_status( 'completed' );
return;
}

最新更新