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

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:在父表单中使用自定义合并标签

  1. 打开父表单的编辑界面,找到「总可计费时长」字段
  2. 如果是计算字段:直接在计算规则里输入{total_billable_hours}
  3. 如果是文本字段:在字段的「默认值」里输入{total_billable_hours},并确保勾选「允许动态填充」

额外注意事项

  • 代码里的ID一定要替换成你自己的实际ID,你可以在表单编辑界面的字段右上角看到字段ID
  • 确保Nested Forms插件已经正确激活,并且父表单和子表单的关联配置正确
  • 测试的时候,先添加几个子表单条目,然后提交父表单,查看总可计费时长是否正确计算
  • 如果你需要更复杂的逻辑(比如过滤某些子条目),可以在foreach循环里添加条件判断

内容的提问来源于stack exchange,提问作者James Persson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:39:57