客服在后台把工单从处理中改成已解决,列表状态变了,用户邮箱安静得像什么都没发生,工单详情页也没有提示。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

add_action('transition_post_status', function ($new, $old, $post) {
  if ($post->post_type !== 'ticket' || $new === $old) { return; }
  cs_notify_ticket($post->ID, $old, $new);
}, 10, 3);

通知逻辑挂在保存文章那个钩子上,后台列表的快速编辑走的是另一条路径,不触发这个钩子。状态变化本身也没有比较新旧值,就算触发了也判断不出改了哪一项。这一点先确认清楚,后面就不用反复试。

「工单状态变更通知」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

具体做法是,改挂状态迁移钩子,回调里拿到新旧两个状态再判断;只对工单这个类型生效,别把文章发布也带上;通知失败要留日志,别让用户和客服都以为发过了。

改完照着核一遍,后台改一次状态,用户那边几分钟内收到一封通知,内容里带新状态。

作者 9823189