添加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
相关产品推荐
相关产品推荐

