【问题标题】:Gravity forms plugin - dynamically populating form field isn't working重力表单插件 - 动态填充表单字段不起作用
【发布时间】:2012-11-06 04:12:46
【问题描述】:

我的重力表格表格出现了一些问题。这是一个多页表单,我需要使用第 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;
}

当我使用var_dump($name); 打印$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 页上也调用了这个过滤器,所以插件是否有可能缓存这个值?我没有使用缓存插件,所以不知道为什么它不起作用。

【问题讨论】:

  • 当你 var dump 时,你是在第二页还是在第一页?
  • var_dump 放置在 function.php 文件中的 name_population_function 中,就在 return 之前,并且第一页已经发送。
  • 抱歉发布晚了,但万一其他人有这个问题,我发现使用 AJAX 发布实际上并不会逐页发布内容,而只是显示/隐藏表单的一部分以呈现页面的外观.禁用 AJAX 发布允许我将字段从一页填充到下一页。如果您确实需要启用 AJAX 发布,那么您可能需要使用 JavaScript 挂钩才能使其工作。

标签: forms wordpress gravity


【解决方案1】:

您可以使用 jQuery 来创建带有.hide.slideToggle 的多个页面的印象,而不是将表单放在多个页面上。这将解决您的问题并使表单数据的提交更加容易。然后简单地调用过去输入的值。

【讨论】:

    【解决方案2】:

    您可以使用查询字符串来保存数据并动态填充字段。

    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;
    }
    

    【讨论】:

      【解决方案3】:

      试试这个 gform_pre_render 过滤器。它为表单 ID 7 添加了一个过滤器。将 7 替换为您的 Gravity 表单的 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;
      }
      

      【讨论】:

      • 为什么在 foreach ($form['fields'] as &$field) 你是通过引用传递 $field ?我只是想知道为什么要这样做?
      • 因为您要更改字段的值,然后在函数结束时返回修改后的 $form 对象。如果您按值传递,您的更改将会丢失。
      猜你喜欢
      • 2015-03-29
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多