Php 如何在多页重力表单中向特定页面添加字段?

Php 如何在多页重力表单中向特定页面添加字段?,php,wordpress,gravityforms,Php,Wordpress,Gravityforms,我正在用Gravity表单构建一个家庭订阅多页表单,并从第三方数据库中获取孩子。我想循环浏览孩子们,并显示每个孩子的姓名输入、成绩下拉列表等 我不知道如何将字段添加到表单中的特定页面。使用gform_pre_render钩子添加字段将字段添加到表单的末尾。我试过设置页码,但还是没有成功 function children_populate($form) { // Add fields $new_field_id = 0; foreach( $form['fields'] as $

我正在用Gravity表单构建一个家庭订阅多页表单,并从第三方数据库中获取孩子。我想循环浏览孩子们,并显示每个孩子的姓名输入、成绩下拉列表等

我不知道如何将字段添加到表单中的特定页面。使用gform_pre_render钩子添加字段将字段添加到表单的末尾。我试过设置页码,但还是没有成功

function children_populate($form) {
// Add fields
    $new_field_id = 0;
    foreach( $form['fields'] as $field ) {
        if( $field->id > $new_field_id ) {
            $new_field_id = $field->id;
        }
    }
    $new_field_id++;
    $properties['type'] = 'text';
    $properties['pageNumber'] = 1;
    $field = GF_Fields::create( $properties );
    $field->id = $new_field_id;
    $field->label = 'Another New Field';
    $field->pageNumber = 1;
    $form['fields'][] = $field;

  return $form;
}
add_filter( 'gform_pre_render_2', 'children_populate' );
add_filter( 'gform_pre_validation_2', 'children_populate' );
add_filter( 'gform_pre_submission_filter_2', 'children_populate' );

上面,只是在表单末尾添加了字段。我希望它显示在我的5页表单的第二页。

您需要在表单对象中循环查找表示要添加字段的页面的页面字段。然后,您可以使用
array\u splice
在页面字段之后的下一个索引处将新字段添加到此页面。您仍然需要为每个子字段设置
$field->pageNumber
属性

此代码段演示了该概念,但不处理实际生成要插入到所需页面上的子字段数组的问题

$target_index = false;
foreach( $form['fields'] as $index => $field ) {
    // Update "2" to your target page number.
    if( $field->type == 'page' && $field->pageNumber == 2 ) {
        $target_index = $index + 1;
        break;
    }
}

array_splice( $form['fields'], $target_index, 0, $child_fields );

不确定GF是否真的按此页码对字段进行排序;它可能只是以“控制中断”的方式使用该值来确定当值从一个字段更改到下一个字段时新页面是否启动。因此,在这种情况下,您必须确保自己将新字段插入到正确的位置。为此创建新数组可能是有意义的。在原始字段上循环,并将字段逐个插入新字段。当到达要插入新字段的位置时(取决于您,具体如何确定),插入该新字段,然后继续将其余原始字段添加到新数组中。在结尾处用新数组覆盖$form['fields']。