基于现有表构建Issue Tracker:多客户问题工单分配需求
嘿,针对你这个用Gravity套件搭建的多客户问题管理需求,我给你梳理了一套实操性强的方案,分两大核心模块来解决:
一、客户与独立Issues DB表的关联实现
要实现每个客户的问题自动流入专属表,核心是给每个提交的问题打上唯一的客户标识,再通过代码或Gravity Flow的逻辑路由到对应表:
- 第一步:在提交检测请求的Gravity Form里添加一个隐藏字段(或仅管理员可见的选择字段),命名为
customer_id,值设为对应客户的唯一标识(比如公司ID/缩写,比如client_a、client_b)。这样每一条问题提交都会带上这个标识。 - 第二步:用Gravity Flow的钩子或自定义PHP函数,在问题创建完成后,根据
customer_id写入对应的数据表。示例代码如下(可以放到主题的functions.php或自定义插件里):
add_action( 'gravityflow_after_entry_save', 'route_issue_to_client_table', 10, 2 ); function route_issue_to_client_table( $entry, $form ) { // 确认是问题提交表单(替换成你的表单ID) if ( $form['id'] != 123 ) return; global $wpdb; $customer_id = rgar( $entry, 'customer_id' ); // 替换成你的字段ID $issue_type = rgar( $entry, 'issue_type' ); // 问题类型字段ID $notes = rgar( $entry, 'notes' ); // 备注字段ID $image_url = rgar( $entry, 'image' ); // 图片字段ID(Gravity Forms会存储附件URL) // 定义客户与表名的映射 $client_tables = [ 'client_a' => 'wp_issues_db_client_a', 'client_b' => 'wp_issues_db_client_b', // 剩下3个客户的表映射 ]; if ( isset( $client_tables[$customer_id] ) ) { $table_name = $client_tables[$customer_id]; // 插入数据到对应表 $wpdb->insert( $table_name, [ 'issue_type' => $issue_type, 'notes' => $notes, 'image_url' => $image_url, 'created_at' => current_time( 'mysql' ) ], [ '%s', '%s', '%s', '%s' ] ); } }
- 第三步:用Gravity View创建客户专属的问题列表时,通过
customer_id字段做过滤,确保每个客户只能看到自己的问题。
二、基于规则的问题邮箱分配方案
可以结合客户维度或问题类型维度来配置分配规则,两种方式都能通过Gravity Flow或自定义代码实现:
方式1:固定客户对应固定邮箱(简单直接)
- 在Gravity Flow里为问题表单创建工作流,添加「发送通知」步骤;
- 在通知的收件人设置里,使用动态字段或自定义短代码来拉取客户对应的邮箱。比如先把客户邮箱存在
customer_id的字段选项值里(比如client_a|a@company.com),然后用{custom_field:customer_id:value}来获取邮箱; - 也可以在代码里直接定义映射,在问题插入表后触发邮件:
// 接上面的函数,在插入表后添加邮件发送逻辑 $client_emails = [ 'client_a' => 'a@company.com', 'client_b' => 'b@company.com', // 其他客户邮箱 ]; if ( isset( $client_emails[$customer_id] ) ) { $to = $client_emails[$customer_id]; $subject = "新问题通知:{$issue_type}"; $message = "发现新问题:\n类型:{$issue_type}\n备注:{$notes}\n图片:{$image_url}"; wp_mail( $to, $subject, $message ); }
方式2:按问题类型分配到不同邮箱(灵活适配场景)
- 如果需要把特定类型的问题发送给对应负责人,比如安全问题发运维邮箱,功能问题发开发邮箱,可以在表单里添加
issue_type字段,然后在Gravity Flow的工作流里设置「条件分支」:- 当
issue_type等于「安全问题」时,发送通知到security@company.com; - 当
issue_type等于「功能异常」时,发送通知到dev@company.com;
- 当
- 也可以用代码实现更复杂的规则,比如同时结合客户和问题类型来分配。
实操小贴士
- 把客户与表、邮箱的映射关系统一维护在一个数组里,后续新增客户或修改配置只需要更新这个数组,不用改核心逻辑;
- 开启Gravity Forms的日志功能,方便排查问题提交和数据写入的异常;
- 给每个客户的Issues表添加索引(比如
customer_id、created_at),提升查询效率。
内容的提问来源于stack exchange,提问作者web5498
相关产品推荐
相关产品推荐

