我的Gravity Forms表单存在一些问题。这是一个多页面表单,我需要使用第1页的帖子值填充第2页的字段。但它不起作用。当然,第2页上的字段配置为“允许字段动态填充”,字段的参数设置为“名称”。 这是我的代码:
add_filter('gform_field_value_name', 'name_population_function');
function name_population_function($value){
$name = $_POST['input_2'] . ' ' . ( ! empty( $_POST['input_3'] ) ? ( $_POST['input_3'] . ' ' ) : NULL ) . $_POST['input_1'];
return $name;
}
当我使用$name
打印var_dump($name);
变量的值时,它实际上是正确的。
如果我将$name
更改为$name = 'Last Middle First';
,则会填充该字段。
感谢您的帮助。
编辑: 出于测试目的,我将代码更改为:
add_filter('gform_field_value_name', 'name_population_function');
function name_population_function($value){
$name = 'Test';
if ( ! empty( $_POST['input_1'] ) && ! empty( $_POST['input_2'] ) ) {
$name = $_POST['input_2'] . ' ' . ( ! empty( $_POST['input_3'] ) ? ( $_POST['input_3'] . ' ' ) : NULL ) . $_POST['input_1'];
//var_dump( $name );
}
return $name;
}
如果我使用var_dump
取消注释该行,则会再次正确设置变量$name
的值,但第2页上的字段会预先填充值Test
。可能在第1页也调用了此过滤器,因此插件可能会缓存此值吗?我不使用缓存插件,所以不知道为什么它不起作用。
答案 0 :(得分:1)
您可以使用jQuery创建包含.hide
或.slideToggle
的多个网页的展示,而不是将表单放在多个页面上。这将解决您的问题,并使表单数据的提交更容易。然后只需调用过去输入的值。
答案 1 :(得分:0)
您可以使用查询字符串来持久保存数据并动态填充该字段。
http://siteurl.com/form-url/?your_parameter=value
add_filter('gform_field_value_author_email', 'populate_post_author_email');
function populate_post_author_email($value){
global $post;
$author_email = get_the_author_meta('email', $post->post_author);
return $author_email;
}
答案 2 :(得分:-1)
请尝试使用此gform_pre_render过滤器。它添加了一个过滤器以形成ID 7.将7替换为您的重力形式的ID。
add_filter('gform_pre_render_7', 'populate_form_pre_render');
function populate_form_pre_render($form){
$name ='';
foreach ($form['fields'] as &$field)
{
// replace 2 with the actual ID of your form field
if ( 2 == $field['id'] ){
if ( ! empty( $_POST['input_1'] ) && ! empty( $_POST['input_2'] ) ) {
$name = $_POST['input_2'] . ' ' . ( ! empty( $_POST['input_3'] ) ? ($_POST['input_3'] . ' ' ) : NULL ) . $_POST['input_1'];
//var_dump( $name );
}
$field['defaultValue']=$name;
echo '<pre>';
print_r($field);
echo '</pre>';
}
}
return $form;
}