【问题标题】:Retain the form in a gravity form confirmation将表格保留在重力表格确认中
【发布时间】:2015-06-07 00:31:49
【问题描述】:

在重力表单确认过程中(在表单成功填写并用户提交表单后)而不是只显示确认文本,我还想在确认文本下方显示确认文本和表单本身。

我不能在 gform 的确认设置中使用重定向到页面 url 或页面选项,因为用户正在通过短代码在各个页面上使用表单(其中一些甚至通过 do_shortcode 硬编码),他正在计划添加更多。

这个想法是,在用户填写并提交表单后(无论表单位于哪个页面),表单数据将被提交,页面重新加载,显示确认消息并显示实际表单(当然所有数据都消失了,新状态)

提前致谢

【问题讨论】:

    标签: wordpress gravity-forms-plugin


    【解决方案1】:

    Jplus2 的解决方案是在函数末尾缺少return $form;

    我还通过在消息中添加短代码找到了一个更简单的解决方案:

    add_filter( 'gform_pre_submission_filter' , "foo_show_confirmation_and_form" , 10 , 1 );
    function foo_show_confirmation_and_form($form) {
      $shortcode = '[gravityform id="' . $form['id'] . '" title="true" description="false"]';
    
      if ( array_key_exists( 'confirmations' , $form ) ) {
        foreach ( $form[ 'confirmations' ] as $key => $confirmation ) {
          $form[ 'confirmations' ][ $key ][ 'message' ] .= $shortcode;
        }
      }
    
      if ( array_key_exists( 'confirmation' , $form ) ) {
        $form[ 'confirmation' ][ 'message' ] .= $shortcode;
      }
      return $form;
    }
    

    【讨论】:

    • 评论有点晚,但我已经更新了我的答案以返回 $form。感谢您的接机。
    【解决方案2】:

    我就是这样做的。

    add_filter( 'gform_pre_submission_filter' , "foo" , 10 , 1 );
    
    function foo ( $form ) {
    
        global $post;
    
        // Get current page url
        $current_page_url = get_post_permalink( $post->ID );
    
        if ( array_key_exists( 'confirmations' , $form ) ) {
    
            foreach ( $form[ 'confirmations' ] as $key => $confirmation ) {
    
                $form[ 'confirmations' ][ $key ][ 'type' ] = 'redirect';
                $form[ 'confirmations' ][ $key ][ 'message' ] = '';
                $form[ 'confirmations' ][ $key ][ 'url' ] = $current_page_url;
                $form[ 'confirmations' ][ $key ][ 'queryString' ] = 'message=Form Data Saved';
    
            }
    
        }
    
        if ( array_key_exists( 'confirmation' , $form ) ) {
    
            $form[ 'confirmation' ][ 'type' ] = 'redirect';
            $form[ 'confirmation' ][ 'message' ] = '';
            $form[ 'confirmation' ][ 'url' ] = $current_page_url;
            $form[ 'confirmation' ][ 'queryString' ] = 'message=Form Data Saved';
    
        }
    
        return $form;
    
    }
    

    挂钩到 gform_pre_submission_filter 过滤器,该挂钩的回调将接收 $form 变量。

    $form 是一个数组,其中包含有关如何将其确认为子数组的详细信息。

    它有 2 个,$form['confirmations'],包含为此特定 gform 注册的所有确认。

    $form['confirmation'],包含要使用的“默认确认”的数据。更改两者,在我的情况下,我将其更改为 'redirect' 类型,然后提供要重定向的 url。

    我也添加了一个查询字符串数据,这里可以添加空格,gform会负责转义。

    这是在一个只有 1 个确认的 gform 上测试的,即 默认确认。

    这也在仅包含 1 个 gform 的页面上进行了测试。

    如果您有一个包含多个 gform 的页面,这很简单,只需将相关 gform 的 id 添加到 queryString 中即可。然后更容易提取查询字符串并识别确认消息属于哪个 gform。

    你可以通过$form['id']

    获取当前gform的id

    希望这对任何人都有帮助。

    【讨论】:

    • 聚会有点晚了,这就是我所需要的一切,只是提交后它不显示确认消息……有解决办法吗?
    • 这里也有同样的问题。没有出现确认消息。
    猜你喜欢
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 2014-05-30
    • 2015-08-21
    相关资源
    最近更新 更多