You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce如何在工作日8-16点自动将订单状态改为已完成

WooCommerce 营业时间自动变更订单状态实现方案

你之前的代码容易失效主要是两个核心问题:

  • 绑定在下单触发的函数中,仅当用户下单瞬间会执行判断,如果订单是运营人员在营业时间手动改成「处理中」的,或者订单在非营业时间下单、营业时间才进入「处理中」状态,都不会触发状态变更
  • 时间判断逻辑冗余,且硬编码时区容易和WordPress后台设置冲突,导致时间判断错误

以下是可直接放到主题functions.php文件中使用的实现代码:

add_action('woocommerce_order_status_processing', 'auto_complete_order_during_working_hours', 10, 1);
function auto_complete_order_during_working_hours( $order_id ) {
    // 获取订单对象,已完成的订单直接跳过
    $order = wc_get_order( $order_id );
    if( !$order || $order->get_status() === 'completed' ) return;

    // 读取WordPress后台设置的时区,避免硬编码冲突
    $timezone = get_option('timezone_string');
    if( empty($timezone) ) $timezone = 'Europe/London'; // 兜底时区,可按需修改
    $datetime = new DateTime('now', new DateTimeZone($timezone));

    // 判断是否为周一到周五
    $week_day = $datetime->format('w');
    if( !in_array( $week_day, [1,2,3,4,5] ) ) return;

    // 判断是否在8:00-16:00之间
    $current_hour = $datetime->format('H');
    if( $current_hour < 8 || $current_hour >= 16 ) return;

    // 所有条件符合,更新订单为已完成
    $order->update_status('completed');
}

该方案的优势:

  • 绑定WooCommerce官方的woocommerce_order_status_processing钩子,只要订单状态变为「处理中」就会触发判断,不管是用户下单自动触发、还是运营人员手动修改的状态,都不会漏执行
  • 直接读取WordPress后台的时区设置,不需要硬编码时区,避免时间判断偏差
  • 逻辑简化,冗余判断全部去掉,执行效率更高
  • 自带已完成状态校验,不会重复执行修改操作

内容的提问来源于stack exchange,提问作者AspireP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:06:04