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

添加Processing状态判断后,woocommerce_new_order钩子无法触发Telegram通知

问题解决建议

核心问题是你选错了钩子:woocommerce_new_order是在订单刚创建时触发的,此时订单的初始状态通常是pending(待支付),还没切换到processing,所以你的状态判断条件永远不会成立,自然发不出通知。

给你两个可行的解决方向:

方案1:用Processing状态专属钩子

直接使用woocommerce_order_status_processing钩子,这个钩子只会在订单状态变为processing时触发,不需要额外判断状态,代码更简洁:

add_action( 'woocommerce_order_status_processing', 'send_tg_on_processing', 10, 2 );
function send_tg_on_processing( $order_id, $order ) {
    $msg = '✅ Order № '.$order_id . ' *success*';
 
    $userId = '-xxxxxxxxxxxxxx'; // 替换为你的Chat ID
    $token = 'xxxxxxxxxxxxxxxxxxxxxxxx'; // 替换为你的机器人Token
    
    file_get_contents('https://api.telegram.org/bot'. $token .'/sendMessage?chat_id='. $userId .'&text=' . urlencode($msg) . '&parse_mode=markdown');
}

方案2:监听订单状态变更过程

如果需要监控订单从其他状态切换到processing的场景,可以用woocommerce_order_status_changed钩子,通过判断新旧状态来触发通知:

add_action( 'woocommerce_order_status_changed', 'send_tg_on_status_change', 10, 4 );
function send_tg_on_status_change( $order_id, $old_status, $new_status, $order ) {
    // 仅当新状态为processing时执行
    if ( $new_status !== 'processing' ) {
        return;
    }
    
    $msg = '✅ Order № '.$order_id . ' *success*';
 
    $userId = '-xxxxxxxxxxxxxx'; // 替换为你的Chat ID
    $token = 'xxxxxxxxxxxxxxxxxxxxxxxx'; // 替换为你的机器人Token
    
    file_get_contents('https://api.telegram.org/bot'. $token .'/sendMessage?chat_id='. $userId .'&text=' . urlencode($msg) . '&parse_mode=markdown');
}

补充:如果坚持用woocommerce_new_order,只有当订单创建时状态直接是processing才会触发(比如虚拟产品自动完成支付的场景),但这种情况非常少见,不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:54:18