Gravity Forms嵌套表单:如何启用父表单合并标签实现子表单数值求和
如何用Gravity Forms + Nested Forms计算子表单数值总和(总可计费时长)
我经常帮用户处理Gravity Forms搭配Nested Forms的这类计算需求,刚好可以给你一套靠谱的解决方案,来实现子表单条目数值的求和并显示在父表单的「总可计费时长」字段里:
步骤1:确认关键字段ID
首先你需要先记下三个关键ID:
- 父表单里的嵌套子表单字段ID(就是你添加的那个关联子表单的字段)
- 子表单里的可计费时长字段ID(每个子条目里用来输入时长的字段)
- 父表单里的总可计费时长字段ID(用来显示最终求和结果的字段,建议用「计算字段」或者「文本字段」)
步骤2:添加自定义合并标签代码
你需要在WordPress的主题functions.php文件(或者自定义插件里)添加以下代码,记得把代码里的ID替换成你自己的实际ID:
// 注册自定义合并标签 add_filter( 'gform_custom_merge_tags', 'add_total_billable_hours_merge_tag', 10, 4 ); function add_total_billable_hours_merge_tag( $merge_tags, $form_id, $fields, $element_id ) { // 替换成你的父表单ID if ( $form_id != 1 ) { return $merge_tags; } $merge_tags[] = array( 'label' => '总可计费时长', 'tag' => '{total_billable_hours}' ); return $merge_tags; } // 处理合并标签的求和逻辑 add_filter( 'gform_replace_merge_tags', 'calculate_total_billable_hours', 10, 7 ); function calculate_total_billable_hours( $text, $form, $entry, $url_encode, $esc_html, $nl2br, $format ) { // 替换成你的父表单ID if ( $form['id'] != 1 ) { return $text; } // 替换成父表单里的嵌套子表单字段ID $nested_field_id = 5; // 替换成子表单里的可计费时长字段ID $billable_hour_field_id = 3; if ( strpos( $text, '{total_billable_hours}' ) === false ) { return $text; } $total = 0; // 获取子表单条目ID列表 $child_entry_ids = rgar( $entry, $nested_field_id ); if ( ! empty( $child_entry_ids ) ) { $child_entry_ids = explode( ',', $child_entry_ids ); foreach ( $child_entry_ids as $child_entry_id ) { $child_entry = GFAPI::get_entry( $child_entry_id ); if ( $child_entry ) { // 累加每个子条目的可计费时长 $hour_value = floatval( rgar( $child_entry, $billable_hour_field_id ) ); $total += $hour_value; } } } // 替换合并标签为计算后的总和,可根据需求调整小数位数 return str_replace( '{total_billable_hours}', number_format( $total, 2 ), $text ); }
步骤3:在父表单中使用自定义合并标签
- 打开父表单的编辑界面,找到「总可计费时长」字段
- 如果是计算字段:直接在计算规则里输入
{total_billable_hours} - 如果是文本字段:在字段的「默认值」里输入
{total_billable_hours},并确保勾选「允许动态填充」
额外注意事项
- 代码里的ID一定要替换成你自己的实际ID,你可以在表单编辑界面的字段右上角看到字段ID
- 确保Nested Forms插件已经正确激活,并且父表单和子表单的关联配置正确
- 测试的时候,先添加几个子表单条目,然后提交父表单,查看总可计费时长是否正确计算
- 如果你需要更复杂的逻辑(比如过滤某些子条目),可以在foreach循环里添加条件判断
内容的提问来源于stack exchange,提问作者James Persson
相关产品推荐
相关产品推荐

