WordPress-重力表单-动态创建字段
尝试为我的表单动态创建新字段,因为我从第三方API获取json。基于这个json,我需要在表单中添加一些字段,而不是固定的数字。所以,我在做这个,把它挂到WordPress-重力表单-动态创建字段,wordpress,gravity-forms-plugin,gravityforms,Wordpress,Gravity Forms Plugin,Gravityforms,尝试为我的表单动态创建新字段,因为我从第三方API获取json。基于这个json,我需要在表单中添加一些字段,而不是固定的数字。所以,我在做这个,把它挂到gform\u pre\u render: add_filter( 'gform_pre_process', 'create_products_gforms' ); add_filter( 'gform_admin_pre_render', 'create_products_gforms' ); add_filter( 'gform_pre_r
gform\u pre\u render
:
add_filter( 'gform_pre_process', 'create_products_gforms' );
add_filter( 'gform_admin_pre_render', 'create_products_gforms' );
add_filter( 'gform_pre_render', 'create_products_gforms' );
function create_products_gforms( $form ) {
$helper = new NSHelper();
$state_name = $_POST['input_7'] ?? '';
$code_value = $helper->get_state_code_by_name( $state_name );
// Only fetch products if current form id is 33, state code is defined
// and if there are products for this state.
if ( $form['id'] != 33 || !$code_value ) {
return $form;
}
// Get product list from NetSuit API based on state code
$products_json_data = get_products_data( $code_value );
$products = json_decode( json_decode( $products_json_data ) );
$new_field_id = 0;
foreach( $form['fields'] as $field ) {
if( $field->id > $new_field_id ) {
$new_field_id = $field->id;
}
}
$new_field_id++;
foreach ( $products as $product_object ) {
// Prepare field properties
$props = array(
'id' => $new_field_id,
'type' => 'singleproduct',
'label' => $product_object->onlinedisplayname,
'basePrice' => floatval( $product_object->price ),
'enableCalculation' => true
);
// Create new gravity forms field and add it to the form object
$nf = GF_Fields::create( $props );
// Hack - insert into array at specific position
// Needed to display product fields before other fields
// in the form
array_splice( $form['fields'], 11, 0, array($nf) );
$new_field_id++;
}
GFAPI::update_form( $form );
$form['dynamic_fields_ids'] = $added_fields_ids;
return $form;
}
这是可行的,即它在前端正确地显示字段。现在,问题是,一旦表单被提交,除了这些动态添加的字段之外,所有字段都在提交中。但事实并非如此。我假设这些字段没有在表单中注册,所以我也尝试了GFAPI::update\u form($form)代码>,但这对提交部分没有帮助,尽管它在后端使用新字段对我的表单进行了修改
有什么想法吗?基于您的用例,米洛斯,我建议您使用gform\u form\u post\u get\u元过滤器:
这将在每次从数据库获取表单时触发,最可靠的触发方式是确保字段出现
如果您更喜欢外科手术,并坚持使用gform_pre_渲染方法,您将希望在其他几个过滤器上应用相同的功能:
gform\u pre\u过程
gform\u admin\u pre\u render
谢谢您的尝试。我已经更新了问题中的代码,因为由于某些原因,代码仍然没有更新条目。但是,对于我新创建的字段,我确实得到了以下信息:注意:未定义的索引:47.3 in/public/wp content/plugins/gravityforms/includes/fields/class-gf-field-singleproduct.php第66行。另外,请注意,我并不真的想为表单保存新字段,以便下次使用。我想创建字段,为了创建当前条目而将其放入表单中,然后将其从表单中删除。所以,我不需要表单中的永久字段,只需要临时字段。您打算如何查看这些条目数据?如果没有适当的字段,GF将不知道在管理中显示什么。你是什么意思?如果管理员中没有字段,它将不会显示在条目列表中?老实说,这听起来很可笑。我计划创建字段、更新表单数据、在后端更新表单、保存条目、从后端删除新添加的字段。此外,尽管我已经添加了GFAPI::update\u form($form),但不管怎样,正如我所说,上面的代码仍然不起作用代码>。